2014-09-11 33 views
4

由於IOS默認layoutMargins 8.0視圖具有附加layoutMargins它默認具有用於每一側上的8倍點的值。無法變更的視圖

當我試圖改變利潤率viewDidLoad似乎對孩子的看法沒有影響:

override func viewDidLoad(){ 
    super.viewDidLoad() 
    self.view.layoutMargins = UIEdgeInsets(top:100, left:100, bottom:100, right:100) 

} 

..itd似乎並不有我不知道任何影響,

+0

的可能的複製[設置的UIView layoutMargins不起作用(http://stackoverflow.com/questions/27421469/setting-layoutmargins-of-uiview-doesnt-work) – klaaspieter 2017-02-10 14:28:03

回答

0

什麼問題是。

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.view.layoutMargins = UIEdgeInsets(top:100, left:100, bottom:100, right:100) 
    println(self.view.layoutMargins.top) 
    println(self.view.layoutMargins.left) 
    println(self.view.layoutMargins.right) 
    println(self.view.layoutMargins.bottom) 
} 

這會爲每個邊距打印100個。如果您嘗試爲該視圖的子視圖設置邊距,則還需要明確設置它們。對self.view.layoutMargins的調用僅影響self.view的layoutMargins。

如果您希望您的視圖的子視圖尊重你的觀點的上海華盈的layoutMargins,您需要在您的視圖設置preservesSuperviewLayoutMargins。

Reference Documentation

+0

應該添加了額外的信息 - 當我'println'佈局值,我得到了默認的不是100'a – aldorain 2014-09-12 06:23:13

+0

@aldorain你確定你正在改變右視圖的layoutMargins,然後呢?除非在幕後出現您未展示的內容,否則沒有理由讓您獲得完全相同代碼的不同結果。 – Ideasthete 2014-09-12 15:50:42

+3

它們在'viewWillAppear'和'viewDidAppear'之間有時會改回 - 然後會因當前未知的原因而繼續更改。我還沒有找到正確的使用鉤子來保存自定義邊距。 – 2014-12-28 17:34:48

4

我用KVO來檢測view.layoutMargins變化。我發現視圖本身會在layoutSubViews處理期間自定義後更改佈局馬爾金。

所以,只要把你的自定義代碼在viewDidLayoutSubviews方法:

- (void)viewDidLayoutSubviews 
{ 
    self.view.layoutMargins = UIEdgeInsetsMake(100.0f, 100.0f, 100.0f, 100.0f); 
} 

PS:通過這些代碼是OC,但我認爲它也可以爲雨燕工作。希望這對你有用!

+0

1。相反,大家在答案中發現[在這裏](https://stackoverflow.com/q/27421469/5175709)我可以用它來改變我的ViewController視圖的layoutMargins。 2.我實際上認爲在實例化時不會有任何限制改變子視圖的layoutMargin,但實際上似乎這樣的限制被放置在子視圖上,因爲我的修改沒有起作用。 「viewDidLayoutSubviews」中唯一改變子視圖邊距的地方 – Honey 2017-12-03 00:41:04

2

您正在嘗試設置視圖控制器的根視圖的佈局空間。根視圖的行爲與佈局邊界中的任何其他視圖的行爲不同。

根視圖的佈局利潤率由視圖控制器專門管理,你不能設置。

從蘋果文檔:

如果視圖是一個視圖控制器的根視圖時,系統設置和管理空間。頂部和底部邊距設置爲零點。側邊距取決於當前的尺寸等級,但可以是16點或20點。您無法更改這些邊距。

https://developer.apple.com/reference/uikit/uiview/1622566-layoutmargins