web-dev-qa-db-fra.com

Ajouter du rembourrage à un UIView

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.

57
Meda

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! :)

43
George Green

Mise à jour pour Swift

view.bounds = view.frame.insetBy(dx: 10.0, dy: 10.0)

:)

27

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

17
yageek

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);
8
Gandalf458

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)
    }
}
7
Omar Albeik

Mise à jour pour Swift 4:

self.yourView.layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
1
Boomerange

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)
0
Radu Ciobanu