2013-02-13 158 views
44

我正在尋找一種方法將padding屬性添加到UIView。理想情況下,我想避免將子類化並將其放入一個類別中。用法是這樣的:添加填充到UIView

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

也許有paddingBox性質以及其將返回一個CGRect描述的尺寸和內部填充盒的位置。

現在,如何實現類似的東西。我最初雖然使用bounds,但不幸的是,bounds的大小與frame的大小(總是相同)只有座標可以不同。

回答

38

這通常通過在視圖中設置邊界來完成。所以如果你想要一個10的插圖,你可以這樣做:

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

邊界定義了相對於幀的視圖的可繪製區域。所以這應該實際上是填充。然後你可以從界限中獲得'paddingBox'。

希望這會有所幫助! :)

+3

不幸的是,這也改變了視圖的大小。正如我在我的問題中提到的那樣,文檔聲明:「邊框矩形的大小與框架矩形的大小相關聯,以便對其中一個的改變影響另一個。換句話說,你發佈的代碼應該有-10而不是10,即使如此,它只會添加頂部和左側填充,但我會再次測試,以確保我不會錯過任何東西。 – Meda 2013-02-13 15:51:13

+0

你有鏈接到文檔,因爲我敢肯定,邊界和框架的大小可以不同? – 2013-02-13 18:03:15

+0

http://stackoverflow.com/questions/749558/why-is-there-an-frame-rectangle-and-an-bounds-rectangle-in-an-uiview和http://stackoverflow.com/questions/1071112/uiviews-frame-bounds-center-origin-when-to-use-什麼是這方面的很好的信息。 – 2013-02-13 18:03:45

7

你真的必須做的是創建一個視圖,並添加一個子視圖。使一個視圖的背景,並給它你想要的框架。然後使第二個子視圖與邊緣插圖一樣。

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

更新夫特3

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

:)

2

您可以覆蓋alignmentRectInsets財產。以下是Swift 4中的一個例子:

class YourCustomView: UIView { 

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