wake-up-neo.com

Hinzufügen von Padding zu einer UIView

Ich suche nach einer Möglichkeit, einer UIView eine padding -Eigenschaft hinzuzufügen. Im Idealfall möchte ich vermeiden, eine Unterklasse zu bilden und sie einer Kategorie zuzuordnen. Die Verwendung wäre so etwas wie:

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

Und vielleicht haben Sie auch eine paddingBox -Eigenschaft, die eine CGRect zurückgibt, die die Größe und Position des inneren Polsterungskastens beschreibt.

Nun, wie würde man so etwas in einer Kategorie implementieren. Anfangs habe ich zwar bounds verwendet, aber leider ist die Größe des bounds mit der Größe des frame verknüpft (immer gleich), nur die Koordinaten können abweichen.

57
Meda

Dies erfolgt im Allgemeinen durch Festlegen der Grenzen in der Ansicht. Wenn Sie also eine Einfügung von 10 möchten, können Sie Folgendes tun:

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

Die Begrenzungen definieren den zeichnungsfähigen Bereich der Ansicht relativ zum Rahmen. Dies sollte also tatsächlich eine Polsterung ergeben. Sie können dann die "paddingBox" nur von den Grenzen bekommen.

Hoffe das hilft! :)

43
George Green

pdate für Swift

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

:)

Seit iOS 8 hat jede Ansicht nun eine layoutMargins -Eigenschaft, die der Auffüllung entspricht.

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

Wenn Sie AutoLayout verwenden, wird ein Format mit |-[subview]-|, | bezieht sich auf die mit layoutMargins definierten Kanten.

Quelle: https://developer.Apple.com/reference/uikit/uiview/1622566-layoutmargins?language=objc

17
yageek

Was Sie wirklich tun müssen, ist eine Ansicht zu erstellen und ihr eine Unteransicht hinzuzufügen. Machen Sie einen Blick auf den Hintergrund und geben Sie ihm den gewünschten Rahmen. Machen Sie dann aus der zweiten Unteransicht den gewünschten Rahmen mit den Kanteneinsätzen.

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

Sie können die Eigenschaft alignmentRectInsets überschreiben. Hier ist ein Beispiel in Swift 4

class YourCustomView: UIView {

    override var alignmentRectInsets: UIEdgeInsets {
        return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    }
}
7
Omar Albeik

Update für Swift 4:

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

Sie können den Rahmen/die Grenzen der Ansicht folgendermaßen einfügen:

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