Ik ben op zoek naar een manier om een padding
onroerend 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 paddingBox
Property ook die een CGRect
zou 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 bounds
gekoppeld 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 directionalLayoutMargins
gebruiken 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 layoutMargins
eigenschap 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)