2014-02-25 58 views
0

我已經在與AutoLayout佈局啓用:iOS的自動佈局設置高度約束爲零導致無效的佈局

UIView 
    UITableView 

我有以下的限制(只有這裏重要的,其餘的都是中省略):

|-(17)-[UITableView:0x15bfc200] priority 1000 (Top space to container) 
[UITableView:0x15bfc200]-(17)-| priority 1000 (Bottom space to container) 
[UITableView:0x15bfc200](=20) priority 750 (TableView height) 

當我試圖將高度設置爲零(例如,它沒有內容)時,應用程序停止並出現異常:

Probably at least one of the constraints in the following list is one you don't want...blah blah blah... 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1559bf40 V:[UITableView:0x15bfc200]-(17)-| (Names: '|':UITableViewCellContentView:0x1559b330)> 

目前,我設置高度使用下面的代碼:

heightConstraint.constant = 0; 

什麼是設置的tableView高度爲零正確的方法是什麼?我應該降低某些約束的優先級嗎?

+0

是否將高度設置爲零而不刪除地址爲0x15bfc200的約束的== 20部分?你如何改變身高? –

+0

@AaronBrager添加代碼示例 – user2786037

+0

您是否將這些約束添加到'self.view'? UITableViewCellContentView被列爲UITableView的超級視圖似乎很奇怪,我相信這是UITableView的私人子視圖。 –

回答

2

我認爲問題是外部UIView是一個特定的大小。它的高度是54點,所以當你最初設置你的約束他們的工作。但是,當您將高度更改爲0時,數學運算不起作用:17 + 0 + 17!= 54.

我不是100%確定您的目標是什麼,但我認爲您應該能夠僅使用頂部約束和高度約束來定位它(不需要底部約束)。這將刪除您的約束加起來到superview的高度的要求。

+0

謝謝,好主意!我是再次爭取底部空間而不是使用頂部+高度!太好了,謝謝Aaron! – user2786037