在方向更改上调整uitableview的大小不会正确调整大小

时间:2014-03-01 16:18:37

标签: uitableview orientation screen-orientation autoresize

更改屏幕方向时,无法正确调整uitableview的大小。我可以让一个方向工作正常但不是两个。 我尝试了两种不同的方法:1)在tableview上使用autoresizingMask,2)使用layoutSubviews方法,这里是每个方法的结果:

1)如果我使用

,使用自动调整功能几乎可以正常工作
self.myTableView.autoresizingMask =  UIViewAutoresizingFlexibleTopMargin |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin;

它在纵向时正确显示然后我移动到横向它也正确显示但不是一直显示到屏幕的末尾。在风景中,我看到左侧和右侧的空间。 所以,我想我们只需将UIViewAutoresizingFlexibleWidth添加到上面的代码行中。它确实使uitableviewcell在横向上扩展到全屏,但是当我更改方向时,它不会在屏幕上保持相同的单元格,有时它会在屏幕中间显示一个单元格的一半和另一个单元格的一半。

2)使用自动布局。当我使用这段代码时,我得到与上面相同的行为:

-(void)layoutSubviews {

  [super layoutSubviews];
    onLoadSize=self.contentView.bounds.size;
    self.myTableView.frame = CGRectMake(0, 0, onLoadSize.width, onLoadSize.height);
    self.selectedBackgroundView.frame = self.myTableView.frame;
}

如果我为方向添加if语句测试,那么它在特定但不是另一个方面适用于该方向。如果我测试两个方向,我会得到与上述相同的行为。

非常欢迎任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

UITableViews通常占用父视图控制器的整个空间,通常不需要约束或主动调整大小,除非您在单个视图中有多个表视图。

考虑通过以下方式管理UITableViewCells的内容(而不是管理表视图): (1)在Interface Builder中对每个自定义单元格应用约束。 (2)当单元格呈现其子视图(layoutSubviews方法)时,重新绘制单元格的框架以适合父UItableView。 (3)调用[cell.contentView needsUpdateConstraints]强制重绘单元格内容。

以下是单元格自定义类的示例代码:

-(void)layoutSubviews
{
    resizeCell:self forView:[the cell's UITableViewController.view]
}

这是一个通用函数,您可以在任何地方添加以供重用:

-(void)resizeCell:(UITableViewCell *)cell forView:(UIView *)view
{
    cell.contentView.frame=CGRectMake(cell.contentView.frame.origin.x,
                                      cell.contentView.frame.origin.y,
                                      view.frame.size.width,
                                      view.frame.size.width,
                                      cell.contentView.frame.size.height);
}

请注意,必须将单元格的UITableViewController传递给单元格的自定义类(作为成员变量)才能使上述代码生效。

祝你好运!