簡體   English   中英

在Storyboard中創建的UIViewController中動態調整UITableView的大小

[英]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];
}

不要將它放在viewDidLoadviewWillAppear:因為即使調用layoutSubviews ,框架也不會改變。 將它放在viewDidAppear:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM