自动布局什么时候才能获取到frame大小 ios
2018-07-06 · 知道合伙人软件行家
关注
展开全部
打开Xcode5,创建一个基于Single View Application模板的iPhone项目。叫做"StrutsProblem":
点击Main.storyboard。在你做别的之前,首先将这个storyboard的自动布局关了。你需要在File inspector,第一个选项的第六个tabs里:
将Use Autolayout的box勾选去掉。现在storyboard使用旧的struts-and-springs模型。
注意:任何你使用Xcode4.5或更高版本中,nib或者storyboard文件都默认激活了自动布局。因为自动布局是iOS6以及以上系统的一个新特性,如果你想使用最新的Xcode开发兼容iOS5的程序,你需要将这个选项去掉。
拖拽三个新的视图到主视图上,并且像这样排列起来:
为了表述更清楚,这里给出每个视图的颜色,这样你就能分清哪个是驴子哪个是马了。
每个视图的inset到窗口的距离都是20点;视图之间的距离也是20点。底部的视图的宽是280点,上面两个视图的宽都是130点。所有的视图的高都是254。
在iPhone Retina 4-inch simulator上运行这个程序,并且将模拟器旋转到landscape。程序看起来便变成这副鬼样,这不是我想象的那样:
注意:你可以使用Hardware\Rotate Left和Rotate Right菜单选项旋转模拟器,或者通过按下键盘上的? 键,同时按下←或→。
而你想象的程序在landscape应该像这样:
很明显,三个视图的autosizing masks留下了一些需要改进的地方。将左上方视图的autosizing设置改成这样:
这将会让视图贴附左上边缘(不是右下边缘),并且当父视图大小改变时,重新调整自身水平和垂直方向的大小。
同样的,右上方视图的autosizing设置改成这样:
底部视图:
再次运行程序,并且旋转到landscape。现在看起来像这样:
已经很接近了,但又不完全一样。视图之间的padding不正确。换个说法就是视图的大小不完全正确。问题出在当父视图改变大小时,autosizing masks告诉子视图调整大小,但又没告诉子视图该调整多少(坑儿?)。
你可以调戏autosizing masks-比如,改变灵活宽度和高度设置(springs)-你不会得到完全正确的三个间距20点的视图。
为了解决这个springs和struts方法的布局问题,非常不幸,你需要额外写一些代码。
在旋转用户界面之前、之间、之后,UIKit会发送一些消息到你的视图控制器,你可以截获这些消息,从而对你UI做出改变。代表性的像viewWillLayoutSubviews,你会重写这个方法从而改变任何需要重新排列的视图的frame。
在这之前,你需要先做出一个outlet属性来引用这个视图。
点击Main.storyboard。在你做别的之前,首先将这个storyboard的自动布局关了。你需要在File inspector,第一个选项的第六个tabs里:
将Use Autolayout的box勾选去掉。现在storyboard使用旧的struts-and-springs模型。
注意:任何你使用Xcode4.5或更高版本中,nib或者storyboard文件都默认激活了自动布局。因为自动布局是iOS6以及以上系统的一个新特性,如果你想使用最新的Xcode开发兼容iOS5的程序,你需要将这个选项去掉。
拖拽三个新的视图到主视图上,并且像这样排列起来:
为了表述更清楚,这里给出每个视图的颜色,这样你就能分清哪个是驴子哪个是马了。
每个视图的inset到窗口的距离都是20点;视图之间的距离也是20点。底部的视图的宽是280点,上面两个视图的宽都是130点。所有的视图的高都是254。
在iPhone Retina 4-inch simulator上运行这个程序,并且将模拟器旋转到landscape。程序看起来便变成这副鬼样,这不是我想象的那样:
注意:你可以使用Hardware\Rotate Left和Rotate Right菜单选项旋转模拟器,或者通过按下键盘上的? 键,同时按下←或→。
而你想象的程序在landscape应该像这样:
很明显,三个视图的autosizing masks留下了一些需要改进的地方。将左上方视图的autosizing设置改成这样:
这将会让视图贴附左上边缘(不是右下边缘),并且当父视图大小改变时,重新调整自身水平和垂直方向的大小。
同样的,右上方视图的autosizing设置改成这样:
底部视图:
再次运行程序,并且旋转到landscape。现在看起来像这样:
已经很接近了,但又不完全一样。视图之间的padding不正确。换个说法就是视图的大小不完全正确。问题出在当父视图改变大小时,autosizing masks告诉子视图调整大小,但又没告诉子视图该调整多少(坑儿?)。
你可以调戏autosizing masks-比如,改变灵活宽度和高度设置(springs)-你不会得到完全正确的三个间距20点的视图。
为了解决这个springs和struts方法的布局问题,非常不幸,你需要额外写一些代码。
在旋转用户界面之前、之间、之后,UIKit会发送一些消息到你的视图控制器,你可以截获这些消息,从而对你UI做出改变。代表性的像viewWillLayoutSubviews,你会重写这个方法从而改变任何需要重新排列的视图的frame。
在这之前,你需要先做出一个outlet属性来引用这个视图。
2017-07-01
展开全部
打开Xcode5,创建一个基于SingleViewApplication模板的iPhone项目。叫做"StrutsProblem":点击Main.storyboard。在你做别的之前,首先将这个storyboard的自动布局关了。你需要在Fileinspector,第一个选项的第六个tabs里:将UseAutolayout的box勾选去掉。现在storyboard使用旧的struts-and-springs模型。注意:任何你使用Xcode4.5或更高版本中,nib或者storyboard文件都默认激活了自动布局。因为自动布局是iOS6以及以上系统的一个新特性,如果你想使用最新的Xcode开发兼容iOS5的程序,你需要将这个选项去掉。拖拽三个新的视图到主视图上,并且像这样排列起来:为了表述更清楚,这里给出每个视图的颜色,这样你就能分清哪个是驴子哪个是马了。每个视图的inset到窗口的距离都是20点;视图之间的距离也是20点。底部的视图的宽是280点,上面两个视图的宽都是130点。所有的视图的高都是254。在iPhoneRetina4-inchsimulator上运行这个程序,并且将模拟器旋转到landscape。程序看起来便变成这副鬼样,这不是我想象的那样:注意:你可以使用Hardware\RotateLeft和RotateRight菜单选项旋转模拟器,或者通过按下键盘上的?键,同时按下←或→。而你想象的程序在landscape应该像这样:很明显,三个视图的autosizingmasks留下了一些需要改进的地方。将左上方视图的autosizing设置改成这样:这将会让视图贴附左上边缘(不是右下边缘),并且当父视图大小改变时,重新调整自身水平和垂直方向的大小。同样的,右上方视图的autosizing设置改成这样:底部视图:再次运行程序,并且旋转到landscape。现在看起来像这样:已经很接近了,但又不完全一样。视图之间的padding不正确。换个说法就是视图的大小不完全正确。问题出在当父视图改变大小时,autosizingmasks告诉子视图调整大小,但又没告诉子视图该调整多少(坑儿?)。你可以调戏autosizingmasks-比如,改变灵活宽度和高度设置(springs)-你不会得到完全正确的三个间距20点的视图。为了解决这个springs和struts方法的布局问题,非常不幸,你需要额外写一些代码。在旋转用户界面之前、之间、之后,UIKit会发送一些消息到你的视图控制器,你可以截获这些消息,从而对你UI做出改变。代表性的像viewWillLayoutSubviews,你会重写这个方法从而改变任何需要重新排列的视图的frame。在这之前,你需要先做出一个outlet属性来引用这个视图。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询