【问题标题】:resizing uitableview on orientation change does not resize correctly在方向更改时调整 uitableview 的大小不会正确调整大小
【发布时间】:2014-05-07 23:01:40
【问题描述】:

更改屏幕方向时,我无法正确调整 uitableview 的大小。我可以使一个方向正常工作,但不能同时进行。 我尝试了 2 种不同的方法: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 语句测试,那么它在特定方向上工作正常,但在另一个方向上不行。如果我测试两个方向,我会得到与上述相同的行为。

非常欢迎任何帮助。

谢谢!

【问题讨论】:

    标签: uitableview orientation screen-orientation autoresize


    【解决方案1】:

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

    考虑通过以下方式管理 UITableViewCells 的内容(而不是管理表格视图): (1) 对 Interface Builder 中的每个自定义单元应用约束。 (2) 当单元格渲染其子视图时,重新绘制单元格的框架以适应父 UItableView(layoutSubviews 方法)。 (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 传递给单元格的自定义类(作为成员变量)才能使上述代码正常工作。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多