[英]Dynamically resize UITableView in UIViewController created in Storyboard
在故事板上的UIViewController中,我有一個UITableView,其大小通常在一個部分中有兩行,沒有頁眉或頁腳,即高度為88.0f
。 在某些情況下,我想添加第三行。 所以在viewWillAppear:animated:
和其他邏輯位置)我將幀設置為44.0f邏輯像素更高:
CGRect f = self.tableView.frame;
self.tableView.frame = CGRectMake(f.origin.x, f.origin.y, f.size.width, f.size.height + 44.0f);
NSLog(@"%@",NSStringFromCGRect(self.tableView.frame));
沒有爭議; 相當標准的調整大小代碼,然而......它不起作用! tableView高度不會在視覺上改變。 NSLog語句報告我期望的高度( 132.0f
)。 這是因為我正在使用故事板嗎? 我不確定為什么這不起作用。
為故事板中的表視圖的高度設置自動布局約束。 然后將約束連接到視圖控制器中的插座,以便可以訪問代碼中的約束。 將約束設置為88.如果要更改表視圖的高度,只需將約束的常量更改為132。
只有在調用layoutSubviews
之后才能修改框架,這發生在viewWillAppear
之后。 在UIVIew
上調用layoutSubviews
后,您可以更改尺寸。
正如Gavin建議的那樣,如果你啟用了自動布局,你可以通過故事板將約束添加到UITableView,連接高度約束並修改其值如下:
constraint.constant = 132.0f
否則,如果禁用了自動布局,則可以簡單地更改更新高度的幀,但將代碼放在不同的方法中,例如viewDidLoad:
.
最近我試着去做你做過的事。 我遇到同樣的問題, tableview
高度不會改變。 現在我得到了解決方案,你需要在更改框架后調用layoutSubviews
。 它對我有用。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
tableView.frame = CGRectMake(tableView.frame.origin.x, tableView.frame.origin.y, tableView.frame.size.width, tableView.frame.size.height + 44.);
[tableView layoutSubviews];
}
不要將它放在viewDidLoad
或viewWillAppear:
因為即使調用layoutSubviews
,框架也不會改變。 將它放在viewDidAppear:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.