Je cherche un moyen d’ajouter une propriété padding
à une vue UIV. Idéalement, j'aimerais éviter de sous-classer et de le classer dans une catégorie. L'utilisation serait quelque chose comme:
myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);
Et peut-être aussi une propriété paddingBox
qui renverrait un CGRect
décrivant la taille et la position de la boîte de remplissage intérieure.
Maintenant, comment pourrait-on implémenter dans une catégorie quelque chose comme ça. Au départ, je pensais utiliser bounds
, mais malheureusement la taille de bounds
est liée à la taille de frame
(toujours la même), seules les coordonnées peuvent différer.
Cela se fait généralement en définissant les limites dans la vue. Donc, si vous voulez un encart de 10, vous pouvez faire:
view.bounds = CGRectInset(view.frame, 10.0f, 10.0f);
Les limites définissent la zone d'affichage de la vue, par rapport au cadre. Cela devrait donc donner un rembourrage. Vous pouvez alors obtenir la 'paddingBox' juste à partir des limites.
J'espère que cela t'aides! :)
Mise à jour pour Swift
view.bounds = view.frame.insetBy(dx: 10.0, dy: 10.0)
:)
Depuis iOS 8, chaque vue a maintenant une propriété layoutMargins
qui correspond au remplissage.
myview.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);
Lorsque vous utilisez AutoLayout, un format avec |-[subview]-|
, |
fera référence aux arêtes définies avec layoutMargins
.
Source: https://developer.Apple.com/reference/uikit/uiview/1622566-layoutmargins?language=objc
Ce que vous devez vraiment faire, c'est créer une vue et y ajouter une sous-vue. Faites une vue de l'arrière-plan et donnez-lui le cadre que vous voulez. Puis, placez la seconde sous-vue sur l'image souhaitée avec les incrustations Edge.
UIView backgroundView = new UIView(CGRect.FromLTRB(0, 0, 100, 100))
{
BackgroundColor = backgroundGray,
};
//Will have a right Edge inset of 10
UIView edgyView = new UIView(CGRect.FromLTRB(0, 0, 90, 100))
{
BackgroundColor = backgroundGray,
}
backgroundView.AddSubview(edgyView);
Vous pouvez remplacer la propriété alignmentRectInsets. Voici un exemple dans Swift 4
class YourCustomView: UIView {
override var alignmentRectInsets: UIEdgeInsets {
return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}
}
Mise à jour pour Swift 4:
self.yourView.layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
Vous pouvez insérer le cadre/les limites de la vue comme ceci:
yourView.frame = yourView.frame.inset(by: UIEdgeInsets(top: .zero, left: 5.0, bottom: 5.0, right: .zero)