UITableview单元格宽度未填充屏幕



我不知道这是AutoLayout还是Xcode的错误,但我已经意识到,如果我在与故事板中的设备大小不同的设备上运行应用程序,则元素采用了不正确的大小。

即,选择View作为iPhone SE并在iPhone 7+上运行应用程序。我的表视图的大小是iPhone SE屏幕的宽度,这在我重新加载视图时会自行修复,然后它采用iPhone 7+屏幕的宽度。

同样需要注意的是,表视图没有固定的宽度,以0的间距固定在顶部、底部、左侧和右侧。如果这也会影响单元格的高度,我也会在代码中以编程方式更改单元格的高度。

视频:https://drive.google.com/open?id=0B0QLbDLfJn6_YzljUGg4RTUwaTg

来自xib(或故事板)的视图在创建时,在添加到视图层次结构之前,具有IB帧值。因此,像您描述的情况可能是,在某个视图成为布局过程的一部分并调整其大小之前,它正在访问从xib加载的视图。

这也可以解释为什么当你离开和回来时它是固定的。第一次,它在值为最终值之前就得到了这些值,但第二次,这些值已经是最终值并且是正确的。

可能的原因是从视图控制器的viewDidLoad()或视图的awakeFromNib()initWith(coder:)调用布局代码。从viewDidLoad()调用的布局代码尤其有问题,因为它在iPhone 5s之前很好,但现在会导致这个问题。

仅仅从这一点就不可能说出问题的具体原因。从视频中可见的NSLog语句来看,问题在于代码所称的"天气视图宽度"。这在布局过程中调用得太早。它需要进入viewWillAppearviewWillLayoutSubviews,以确保为任何依赖于它的计算准备好正确的值。希望这能有所帮助。

我似乎无法重新创建它。我建议仔细检查Xcode和Developer工具(softwareupdate --install -a)的任何更新。

如果没有,请重新启动Xcode。

编辑:不管这个答案,请阅读Mike Sand的帖子。

在viewDidLoad或viewWillAppear 中尝试self.view.layoutIfNeeded

最新更新