IOS自定义表格单元格在屏幕方向改变时不会自动调整宽度

12

如何让自定义表格单元格具有其自己的 .XIB 和 .h 和 .m 文件,且在设备旋转时单元格宽度不会改变?即使从竖屏旋转到横屏,该单元格的宽度也不会改变。发生了什么导致这种情况?不想手动设置框架大小。如果需要,可以发布代码,但是也许我们可以在没有代码的情况下回答这个问题。即使在横屏模式下启动应用程序,该单元格也不会设置更大的宽度。

[补充]

非自定义单元格也无法正常工作。

self.tableViewSelection.autoresizesSubviews = true;
self.tableViewSelection.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.view.autoresizesSubviews = true;

似乎已经正确设置了表格的 XIB 调整大小(不支持 iOS6)。


一些屏幕截图会很有帮助。在这里很难确定哪些内容实际上没有被调整大小。 - matt
我同意,但是这个问题现在对我已经没有兴趣了。如果版主想要的话,我们可以将其删除。 - ort11
5个回答

8

如果您正在重写layoutSubviews或其他方法,请不要忘记调用它的super:

override func layoutSubviews() {
    //...

    super.layoutSubviews()
}

不这样做会导致你所面临的问题。

你是个天才。 - Abhishek

2

单元格的宽度将自动与表格视图相同。因此,未重新调整大小的可能是表格视图。您需要提供适当的约束条件(如果使用Autolayout,iOS 6中的默认值)或自动调整大小掩码(否则),以便它将在响应顶级视图调整大小以补偿设备旋转时重新调整大小。


是的,这就是应该发生的事情。但在这个项目中,由于某种原因它没有发生,我正在努力找出原因。尝试了上面的硬编码,但没有成功。我猜测正确的单元格大小是在(cell for index)和(cell will display)之间由表视图设置的。 - ort11

1
对于 Swift 2,它将是:

cell.contentView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]

1
在旋转时自动调整自定义单元格大小时,我也遇到了同样的问题。经过一番努力,我得出了授权cell.contentView的解决方案,因为我将我的视图作为子视图添加到cell.contentView中。
我使用以下代码,我的代码运行良好 :)
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

你提到的是正确的,但是自动调整大小的掩码应该设置成这样:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)。我也和你在代码中提到的一样有同样的疑问,所以我在SO上发布了一个问题,你可以查看它作为参考:https://dev59.com/pWsz5IYBdhLWcg3wpZhF - Raj Pawan Gumdal
这段代码在Swift2中已经不再适用了。所有这些常量最终都会成为未解决的标识符。 - zeeple

0
在Swift 4中,以下代码可以正常工作。
cell.cellUIView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

注意:`cellUIView`是我添加到原型单元格的`contentView`中的一个`UIView`。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接