Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Uitableview 为什么约束只在第一次方向更改后才在tableView上起作用?_Uitableview_Storyboard_Uitabbarcontroller_Constraints_Autolayout - Fatal编程技术网

Uitableview 为什么约束只在第一次方向更改后才在tableView上起作用?

Uitableview 为什么约束只在第一次方向更改后才在tableView上起作用?,uitableview,storyboard,uitabbarcontroller,constraints,autolayout,Uitableview,Storyboard,Uitabbarcontroller,Constraints,Autolayout,UITableView脚本、约束和自动布局。N 是否有一种方法可以在viewDidLoad中调用以修复此问题 小牛队10.9.2 Xcode 5.1 这是一个iOS应用程序,UIAbbarController,包含UIViewController,它的UIView中有 top area:UILabel middle area:UITable bottom area: Button, Label and Switch 这是我的第一个故事板上的一张照片: 顶部区域的标签约束在UIView的顶部、

UITableView脚本、约束和自动布局。N 是否有一种方法可以在viewDidLoad中调用以修复此问题

小牛队10.9.2 Xcode 5.1

这是一个iOS应用程序,UIAbbarController,包含UIViewController,它的UIView中有

top area:UILabel
middle area:UITable
bottom area: Button, Label and Switch
这是我的第一个故事板上的一张照片:

顶部区域的标签约束在UIView的顶部、左侧和右侧

中间的UTababVIEW被限制在顶部和底部之间的中心区域

按钮标签和开关被约束在UIView的下部,UITableView的下方

当视图首次出现时,UITableView向下延伸过远,覆盖了按钮、标签和开关

https://www.dropbox.com/s/d0mqin7bh4cglgj/Screenshot%202014-03-26%2021.18.23.png
第一次旋转更改后,约束将按预期工作

https://www.dropbox.com/s/047fj86caqpp5kl/Screenshot%202014-03-26%2021.19.29.png
然后,约束将通过任意数量的方向更改继续工作

https://www.dropbox.com/s/fug0znnf8fc1etr/Screenshot%202014-03-26%2021.21.28.png
这有什么解决办法吗

https://www.dropbox.com/s/0f1oabbj9e05j2h/Screenshot%202014-03-26%2021.22.47.png

非常感谢,Mark

您似乎有模糊的约束,因此界面的某些部分(“电子邮件”按钮、UISwitch等)只是偶尔出现。您需要添加更多的约束,这样就不会有更多的歧义

关于模糊约束 在启动时,以及每次旋转设备和接口以进行补偿时,都会出现布局。这将导致基于约束重新计算视图的位置和大小。如果你的布局只在某些时候起作用,就像你说的——当应用程序启动时,情况是错误的,但当你旋转(再次执行布局)后,它们看起来是正确的——这通常是你有模糊约束的迹象。这意味着您的布局未被您提供的约束所充分确定。运行时不知道该做什么(它没有足够的信息),因此每次新执行布局时,它可能会做不同的事情

当您有不明确的约束时,在应用程序运行时,您不会在控制台中收到任何通知。因此,不明确的约束可能会逃过您的注意。如果约束是在代码中提供的,那么这个问题尤其严重。一个有用的技巧是在调试器中暂停应用程序,并在控制台命令行中键入(然后单击Return):

如果任何视图具有不明确的布局,它们将在运行时的响应中清楚地标记


如果您的约束都是在Interface Builder中形成的,那么Xcode 5可以很好地为您提供问题警告。第一条规则应该是:如果你看到任何警告,请注意!处理约束,直到Interface Builder中不再出现警告。然后,也只有到那时,才能运行应用程序。

它看起来更像是“按钮标签和开关”从屏幕上消失了。这通常是约束不足的迹象。你在故事板上看到什么警告了吗?或者,运行通常的检查,看看你是否有不明确的布局。马特,很高兴你能写。有4个关于错位视图的警告,都是关于电视下面的四个对象,但UITableView没有任何警告。如果约束在加载时起作用,然后在第一次方向改变时失效,我会说约束肯定是“错误的”,这是因为约束在第一次加载时失效,然后在第一次旋转后按照我的要求工作,这让我觉得我需要从我的代码中调用一些方法。你所说的符合我的理论。在屏幕截图中,它看起来不像是表视图覆盖了四个对象;看起来这四个物体不见了。你应该在故事板上工作,直到没有更多的警告!谢谢马特,我需要另一种克制!我会把我的建议写下来,作为一个实际的答案,只是为了帮助其他任何人。
(lldb) po [[UIWindow keyWindow] _autolayoutTrace]