padding
プロパティをUIViewに追加する方法を探しています。理想的には、サブクラス化を避けてカテゴリに入れたいと思います。使用方法は次のようになります。
myview.padding = UIEdgeInsetsMake(10, 10, 10, 10);
そして、おそらく内部パディングボックスのサイズと位置を説明するpaddingBox
を返すCGRect
プロパティもあります。
さて、そのようなカテゴリーにどのように実装するのでしょうか。最初はbounds
を使用しましたが、残念ながらbounds
のサイズはframe
のサイズにリンクされます(常に同じ)座標のみが異なります。
これは通常、ビュー内で境界を設定することによって行われます。したがって、すべてのラウンドで10のインセットが必要な場合は、次のことができます。
view.bounds = CGRectInset(view.frame, 10.0f, 10.0f);
境界は、フレームに相対的なビューの描画可能領域を定義します。したがって、これは実際にパディングを与える必要があります。その後、境界から「paddingBox」を取得できます。
お役に立てれば! :)
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
あなたが本当にしなければならないことは、ビューを作成し、それにサブビューを追加することです。 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);
AlignmentRectInsetsプロパティをオーバーライドできます。 Swift 4の例です
class YourCustomView: UIView {
override var alignmentRectInsets: UIEdgeInsets {
return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
}
}
Swift 4:の更新
self.yourView.layoutMargins = UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)
次のようにビューのフレーム/境界を挿入できます。
yourView.frame = yourView.frame.inset(by: UIEdgeInsets(top: .zero, left: 5.0, bottom: 5.0, right: .zero)