在Storyboard中创建的UIViewController中动态调整UITableView的大小

时间:2014-01-13 21:02:57

标签: ios iphone objective-c uitableview uistoryboard

在故事板上的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)。这是因为我正在使用故事板吗?我不确定为什么这不起作用。

3 个答案:

答案 0 :(得分:14)

为情节提要中的表格视图的高度设置自动布局约束。然后将约束连接到视图控制器中的插座,以便可以访问代码中的约束。将约束设置为88.当您想要更改表视图的高度时,只需将约束的常量更改为132.

答案 1 :(得分:0)

您只能在调用layoutSubviews后修改框架,该调用发生在viewWillAppear之后。在layoutSubviews上调用UIVIew后,您可以更改尺寸。

正如Gavin建议的那样,如果你启用了autolayout,你可以通过故事板将约束添加到UITableView,连接高度约束并修改其值如下:

constraint.constant = 132.0f

否则,如果您禁用了自动布局,则只需更改更新高度的帧,但将代码放在不同的方法中,例如viewDidLoad:

答案 2 :(得分:0)

最近我试着去做你做的事。我遇到同样的问题,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: