Voeg op een UIVIEW

Ik ben op zoek naar een manier om een ​​paddingonroerend goed toe te voegen aan een UIVIEW. Idealiter zou ik willen vermijden om te subclassen en het in een categorie te plaatsen. Het gebruik zou zoiets zijn als:

myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);

en misschien een paddingBoxProperty ook die een CGRectzou retourneren die de grootte en positie van de innerlijke opvoedingsbox beschrijven.

Nu, hoe zou het ene implementeer in een categorie zoiets. Ik ben aanvankelijk echter van het gebruik van bounds, maar helaas is de grootte van de boundsgekoppeld aan de grootte van de frame(altijd hetzelfde) alleen de coördinaten kunnen verschillen.


Antwoord 1, Autoriteit 100%

Dit wordt over het algemeen gedaan door de grenzen in de weergave in te stellen. Dus als je een inzet van 10 helemaal rond wilde, zou je kunnen doen:

view.bounds = CGRectInset(view.frame, 10.0f, 10.0f);

De grenzen definieert het opstelbare deel van de weergave, ten opzichte van het frame. Dus dit zou een opvulling moeten geven. Je kunt dan de ‘PaddingBox’ krijgen, net van de grenzen.

Ik hoop dat dit helpt! 🙂

Update in Swift 5+, het is

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

Antwoord 2, Autoriteit 75%

update voor snelle 3

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

🙂


Antwoord 3, Autoriteit 70%

Update : Sinds iOS11 moet u directionalLayoutMarginsgebruiken in plaats van layoutMargins.

Bron: https://developer.apple.com/ Documentatie / Uikit / UIView / 1622566-lay-outmargins? Taal = objc

Sinds iOS 8 heeft elke weergave nu een layoutMarginseigenschap die overeenkomt met de vulling.

myview.layoutMargins = UIEdgeInsetsMake(10, 10, 10, 10);

Wanneer u Autolayout gebruikt, een formaat met |-[subview]-|, |-verwijst naar de randen die zijn gedefinieerd met layoutMargins.

Bron: https://developer.apple.com/ Referentie / Uikit / UIView / 1622566-lay-outmargins? Taal = objc


Antwoord 4, Autoriteit 23%

U kunt de eigenschap van de alignmentRectinsets overschrijven. Hier is een voorbeeld in Swift 4

class YourCustomView: UIView {
    override var alignmentRectInsets: UIEdgeInsets {
        return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    }
}

Antwoord 5, Autoriteit 21%

Wat u echt hoeft te doen is een weergave creëren en een subview aan het toevoegen. Maak een weergave de achtergrond en geef het het gewenste frame. Maak vervolgens de tweede subview het gewenste frame met de rand-insets.

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

Antwoord 6, Autoriteit 13%

Update voor Swift 4:

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

Antwoord 7, Autoriteit 2%

U kunt het frame / grenzen van de weergave als volgt inzetten:

   yourView.frame = yourView.frame.inset(by: UIEdgeInsets(top: .zero, left: 5.0, bottom: 5.0, right: .zero)

Other episodes