Xcode UITableviewcell宽度未填充屏幕

Xcode UITableviewcell宽度未填充屏幕,xcode,autolayout,ios-autolayout,Xcode,Autolayout,Ios Autolayout,我不知道这是否是AutoLayout或Xcode的错误,但我意识到,如果我在与情节提要中的设备大小不同的设备上运行我的应用程序,则元素采用的大小不正确 例如,选择View as iPhone SE并在iPhone 7+上运行应用程序我的tableview的大小是iPhone SE屏幕的宽度,当我重新加载视图时,它会自行修复,然后采用iPhone 7+屏幕的宽度 还有一点需要注意的是,表格视图没有固定的宽度,它被固定在顶部、底部、左侧和右侧,间距为0,而且我正在以编程方式在代码中更改单元格的高度,

我不知道这是否是AutoLayout或Xcode的错误,但我意识到,如果我在与情节提要中的设备大小不同的设备上运行我的应用程序,则元素采用的大小不正确

例如,选择View as iPhone SE并在iPhone 7+上运行应用程序我的tableview的大小是iPhone SE屏幕的宽度,当我重新加载视图时,它会自行修复,然后采用iPhone 7+屏幕的宽度

还有一点需要注意的是,表格视图没有固定的宽度,它被固定在顶部、底部、左侧和右侧,间距为0,而且我正在以编程方式在代码中更改单元格的高度,如果这也会影响它的话


视频:

我似乎无法重现这个。我建议仔细检查Xcode和开发工具的任何更新(
softwareupdate--install-a

如果没有,请重新启动Xcode


编辑:忽略此答案,请阅读帖子。

我似乎无法重现此内容。我建议仔细检查Xcode和开发工具的任何更新(
softwareupdate--install-a

如果没有,请重新启动Xcode


编辑:忽略此答案,请阅读帖子。

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

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

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


从这件事上说不出到底是什么问题。从视频中可见的NSLog语句来看,问题在于代码所称的“天气视图宽度”。在布局过程中调用它太早了。它需要进入
视图将出现
视图将布局子视图
,以确保正确的值可用于任何依赖于它的计算。希望这有帮助

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

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

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



从这件事上说不出到底是什么问题。从视频中可见的NSLog语句来看,问题在于代码所称的“天气视图宽度”。在布局过程中调用它太早了。它需要进入
视图将出现
视图将布局子视图
,以确保正确的值可用于任何依赖于它的计算。希望这有帮助

试试self.view.layoutifneed in viewDidLoad或viewwillbeen

试试self.view.layoutifneed in viewDidLoad或viewwillbeen

这很奇怪。。。我想你的问题是这是否是一个bug?如何重新加载视图?是的,它是一个基于选项卡的应用程序,所以当我通过选择选项卡图标进入另一个视图并返回时,它会自行排序一秒钟,我现在会附加一个视频听起来像Xcode中的bug。稍后我将尝试重新创建它。我添加了一个视频,这样你们都可以看到问题,希望这不会影响我的应用程序在应用商店中的运行@杰布:那太奇怪了。。。我想你的问题是这是否是一个bug?如何重新加载视图?是的,它是一个基于选项卡的应用程序,所以当我通过选择选项卡图标进入另一个视图并返回时,它会自行排序一秒钟,我现在会附加一个视频听起来像Xcode中的bug。稍后我将尝试重新创建它。我添加了一个视频,这样你们都可以看到问题,希望这不会影响我的应用程序在应用商店中的运行@Jabt1234试过了,XCode不需要更新,因为它是最新的。可能会清除缓存?这不是xcode错误。您可以通过在
viewDidLoad
中添加宽度为
self.view.frame.size.width
的子视图来重新创建它。子视图将始终具有Interface Builder中的宽度。尝试了该方法后,XCode不需要更新,因为它是最新的。可能会清除缓存?这不是xcode错误。您可以通过在
viewDidLoad
中添加宽度为
self.view.frame.size.width
的子视图来重新创建它。子视图将始终具有Interface Builder中的宽度。