Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.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
Ios 在具有复杂视图的Interface Builder中使用自动布局_Ios_Iphone_User Interface_Interface Builder_Autolayout - Fatal编程技术网

Ios 在具有复杂视图的Interface Builder中使用自动布局

Ios 在具有复杂视图的Interface Builder中使用自动布局,ios,iphone,user-interface,interface-builder,autolayout,Ios,Iphone,User Interface,Interface Builder,Autolayout,所以,这里有一个棘手的问题。我正在开发一款只支持肖像的应用程序,它应该与iPhone4S、5/5s/5c和6/6 Plus兼容。不幸的是,为了使用户界面与前面列出的设备完全兼容,我在使用自动布局时遇到了一些问题 下面是一个屏幕截图,显示了iPhone 6 Plus的UI应该是什么样子,我正在使用它作为其他屏幕尺寸的参考: 我有一个338x338点的蓝色圆圈,一个180x180的红色圆圈,一个118x118的绿色圆圈,一个84x84的紫色圆圈,最后还有一个50点高的广告横幅。我希望得到的结果是,i

所以,这里有一个棘手的问题。我正在开发一款只支持肖像的应用程序,它应该与iPhone4S、5/5s/5c和6/6 Plus兼容。不幸的是,为了使用户界面与前面列出的设备完全兼容,我在使用自动布局时遇到了一些问题

下面是一个屏幕截图,显示了iPhone 6 Plus的UI应该是什么样子,我正在使用它作为其他屏幕尺寸的参考:

我有一个338x338点的蓝色圆圈,一个180x180的红色圆圈,一个118x118的绿色圆圈,一个84x84的紫色圆圈,最后还有一个50点高的广告横幅。我希望得到的结果是,iphone6plus的用户界面能够尊重这些视图大小,而其他所有视图的用户界面都能适当缩小;除此之外,我将让用户付费删除底部的广告横幅,因此我需要相应地调整用户界面的大小。设置横幅的圆形垂直间距,并将其高度设置为0?。我把界面生成器弄得一团糟,得到了一个不错的结果——不是那么精确。查看iPhone 4s屏幕上的用户界面:

看起来不错,但有个大问题。在Interface Builder中,我正在使用一个与iPhone 6加414点宽度相同的自由形式ViewController,我在上面添加了所有具有前面列出的帧大小的圆形视图。举个例子,让我们暂时忽略所有其他约束以集中于纵横比约束:在338x338蓝色圆圈上,我添加了纵横比约束,180x180红色圆圈上也是如此。然后我将控件从红圈拖动到蓝圈,再次单击纵横比,使其根据蓝圈调整大小。正如我所说,结果并不精确,因为如果我打印redCircle的框架,控制台会说它的宽度等于175.6667,而不是180点


这样你就可以自己检查这个项目了。我相信它比千言万语更有价值。我不太擅长自动布局,我确信我创建了太多无用的约束。如何改进布局?

您需要将所有圆形视图的高度和宽度设置为与其父视图成比例。 我将蓝色视图的高度设置为与其父视图成比例的0.5,其宽度将与自身的纵横比设置为1:1 对所有其他视图重复相同操作,并根据需要在视图之间应用垂直间距和水平间距

这就是它在iPhone4上的外观

这就是iphone6plus的外观


它必须是自动布局吗?当通过代码进行布局时,这样的事情似乎要容易得多。。但也许这只是我的意见遗憾的是,我对自动布局也不是很熟悉。我认为您需要比IB中自动布局允许的逻辑多一点。我会找出您可以使用的最简单约束,然后在加载视图时在代码中调整它们。可以在代码中引用约束,就像可以通过视图本身控制拖动到代码中一样。我这样做是为了巧妙地利用一些限制,使事情变得恰到好处。例如,如果您不满意宽度变成175.66667,那么在代码中,您可以在进行一些舍入后调整约束。目前,我在实际项目中没有使用自动布局。我只需查看视图框,查看应用程序正在哪个设备上运行。当由于后台调用/导航/音频而导致状态栏高度增加时,界面更改其高度时,我对这种方法有一些问题。看起来autolayout完全按照它应该的方式工作。autolayout的全部目的是停止考虑特定像素的设计。红圈不是180点,这在功能上有关系吗?