我不知道这是否是AutoLayout或Xcode的错误,但我已经意识到如果我在与我的情节提要中的设备尺寸不同的设备上运行我的应用程序,元素采用不正确的大小。
即。选择View as iPhone SE并在iPhone 7+上运行应用程序我的tableview的大小是iPhone SE屏幕的宽度,当我重新加载视图然后它采用iPhone 7+屏幕的宽度时,它会自行修复。
只是一张纸条,表格视图也没有固定的宽度,固定在顶部,底部,左侧和右侧,间距为0,我也可以通过编程方式更改单元格的高度代码,如果这也可能影响它。
视频:https://drive.google.com/open?id=0B0QLbDLfJn6_YzljUGg4RTUwaTg
答案 0 :(得分:3)
来自xib(或storyboard)的视图在创建它们之前具有其IB帧值,然后将它们添加到视图层次结构中。因此,您描述的案例可能是某些内容正在访问从xib加载的视图,然后才能成为布局过程的一部分并调整大小。
这也可以解释为什么当你离开并回来时它已被修复。第一次,它在最终之前得到了值,但第二次这些值已经是最终的和正确的。
从viewDidLoad()
为视图控制器调用的布局代码,或awakeFromNib()
或initWith(coder:)
为视图调用的布局代码可能是原因。从viewDidLoad()
调用的布局代码特别成问题,因为iPhone 5s很好,但现在会导致这个问题。
不可能从这里说出究竟是什么问题。从视频中可见的NSLog语句中,问题是“天气视图宽度”的任何代码调用。这在布局过程中被称为过早。它需要进入viewWillAppear
或viewWillLayoutSubviews
以确保正确的值已准备好进行与此相关的任何计算。希望这可以帮助。
答案 1 :(得分:0)
我似乎无法重现这一点。我建议仔细检查Xcode和开发人员工具(softwareupdate --install -a
)的任何更新。
如果没有,请重新启动Xcode。
编辑:请忽略此答案,请阅读https://docs.angularjs.org/api/ng/directive/ngRepeat帖子。
答案 2 :(得分:0)
在viewDidLoad或viewWillAppear中尝试self.view.layoutIfNeeded