web-dev-qa-db-ja.com

UIViewにパディングを追加する

paddingプロパティをUIViewに追加する方法を探しています。理想的には、サブクラス化を避けてカテゴリに入れたいと思います。使用方法は次のようになります。

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

そして、おそらく内部パディングボックスのサイズと位置を説明するpaddingBoxを返すCGRectプロパティもあります。

さて、そのようなカテゴリーにどのように実装するのでしょうか。最初はboundsを使用しましたが、残念ながらboundsのサイズはframeのサイズにリンクされます(常に同じ)座標のみが異なります。

57
Meda

これは通常、ビュー内で境界を設定することによって行われます。したがって、すべてのラウンドで10のインセットが必要な場合は、次のことができます。

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

境界は、フレームに相対的なビューの描画可能領域を定義します。したがって、これは実際にパディングを与える必要があります。その後、境界から「paddingBox」を取得できます。

お役に立てれば! :)

43
George Green

Swiftの更新

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

:)

IOS 8以降、各ビューにはパディングに対応するlayoutMarginsプロパティがあります。

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

AutoLayoutを使用する場合、|-[subview]-||は、layoutMarginsで定義されたエッジを参照します。

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

17
yageek

あなたが本当にしなければならないことは、ビューを作成し、それにサブビューを追加することです。 1つのビューを背景にして、必要なフレームを与えます。次に、2番目のサブビューを、エッジインセットで必要なフレームにします。

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

AlignmentRectInsetsプロパティをオーバーライドできます。 Swift 4の例です

class YourCustomView: UIView {

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

Swift 4:の更新

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

次のようにビューのフレーム/境界を挿入できます。

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