在故事板上的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
)。这是因为我正在使用故事板吗?我不确定为什么这不起作用。
答案 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];
}
不要将其放在viewDidLoad
或viewWillAppear:
中,因为即使layoutSubviews
被调用,框架也不会改变。将其放在viewDidAppear: