AutoLayout的一些注意事项
要了解autolayout 首先要知道程序视图启动顺序:
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"1");
} -(void)updateViewConstraints
{
[super updateViewConstraints];
NSLog(@"2");
} -(void)viewDidLayoutSubviews
{
//调用不止一次 跟子视图的数量有关
[super viewDidLayoutSubviews];
NSLog(@"3");
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"4");
}updateViewConstraints方法中进行视图上布局计算,得出各个控件的frame.但是此时并没有将这些frame赋值给各个控件。在viewDidLayoutSubviews方法中,各个控件的frame赋值已经完成,但是并不是在这个方法中赋值的。
如果我们要代码添加控件和约束,别忘了先去除控件的autoresizing ,否则会报出警告,因为二者会存在约束冲突。translatesAutoresizingMaskIntoConstraints=NO 代码添加控件还应注意,控件的创建和添加应在updateViewConstraints 方法之前。否则 每次添加控件都会触发updateViewConstraints方法,导致界面会抖动,以及出现不期望的结果。当我们使用自动布局时还应注意,控件分为两种,一种是固定宽高的,另一种是不固定的依靠自身内容决定宽高的。比如 开关控件就是个固定大小的,它的大小就是那么大,不会改变。对于这种控件,我们只需要设定它的左边和上边的位置就可以了,设置好之后,这个控件还可以作为其他控件的约束参照。但是比如label 这样根据内容决定宽高的控件,虽然在有内容时候,它也可以只设置左边和上边的距离,但是它不能作为其他控件的参照了,除非锁定了它的宽高。比如 我们设定label ,距离左边父控件 20 ,距离上边父控件20.那么假如我们有另一个控件(假定为button)我们不可以设定button 距离左边这个label 20。<span style="font-family: Arial, Helvetica, sans-serif;">自动布局中大多数控件都是好设定的,但是比较难搞的时scrollview 。因为它是靠自身内容的大小来决定它的大小的。比如,我们设定了scrollview 距离左上下右的距离都是20 ,那么它会提示警告。解决的办法之一就是在scrollView内部再添加一个容器view,将这个view设定为与scrollview 完全贴近。然后将这个view的大小改为我们所需要的contentView的大小。最后再这个view中添加控件即可实现滚动。</span>
总体来说自动布局很好地解决了屏幕适配 ,尤其是横竖屏切换的问题。大大简化了我们的计算代码,但是我们又有多少应用是同时支持横竖屏的呢?而且自动布局使我们界面的动画及控件的动态创建都收到了极大的影响,尽管这些影响都能解决,但是还是不如计算frame方便。而且自动布局尽管引入了vfl 语言简化代码,但是约束设置错误的话真的是很难查,如果我们需要使用动画的话,需要将约束设置为属性。设置成属性的话,不如计算frame方便。如果你数学不是很差的话,建议你还是使用计算frame 来布局吧</span>
AutoLayout的一些注意事项的更多相关文章
- IOS开发学习笔记038-autolayout 自动布局 界面实现
在storyboard/xib文件中实现自动布局 autolayout 1.注意事项 autolayout和frame属性是有冲突的,所以如果准备使用autolayout,就不要再代码中对控件的fra ...
- 【原】Masonry+UIScrollView的使用注意事项
[原]Masonry+UIScrollView的使用注意事项 本文转载请注明出处 —— polobymulberry-博客园 1.问题描述 我想实现的使用在一个UIScrollView依次添加三个UI ...
- mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法与注意事项
mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法与注意事项 字数400 ...
- Masonry使用注意事项
1 理解自身内容尺寸约束与抗压抗拉 自身内容尺寸约束:一般来说,要确定一个视图的精确位置,至少需要4个布局约束(以确定水平位置x.垂直位置y.宽度w和高度h).但是,某些用来展现内容的用户控件,例如文 ...
- 【收藏】Android AutoLayout全新的适配方式, 堪称适配终结者
来源:http://blog.csdn.net/lmj623565791/article/details/49990941 更多:Android屏幕适配全攻略(最权威的Google官方适配指导) 一. ...
- Android AutoLayout全新的适配方式 堪称适配终结者(转)
一.概述 相信Android的开发者对于设配问题都比较苦恼,Google官方虽然给出了一系列的建议,但是想要单纯使用这些建议将设备很轻松的做好,还是相当困难的.个人也比较关注适配的问题,之前也发了几篇 ...
- AutoLayout框架Masonry使用心得
AutoLayout框架Masonry使用心得 字数1769 阅读1481 评论1 喜欢17 我们组分享会上分享了页面布局的一些写法,中途提到了AutoLayout,会后我决定将很久前挖的一个坑给填起 ...
- 史上比较用心的纯代码实现 AutoLayout
入职有两三个月了吧,都是使用 Objective-C 纯代码(虽然有时候偷偷参杂一些 Swift 开源库)来编写公司APP,写布局的时候几乎都是要么在初始化的时候用 initWithFrame,要么就 ...
- iOS开发中xib和Storyboard中需要注意的事项
使用xib注意事项: 1.只有自带view的控件才可以使用xib,因为它本身就是一个view 2.在使用可视化控件添加属性(代码)时候,如果删除了属性代码,一定要在xib上解除关联(不然会崩溃) 3. ...
随机推荐
- 【JS】Beginner8:Objects
1.Real life object:propertiese & abilities JS object:a collection of named properties & meth ...
- 韦东山yy公开课笔记(2)--各种杂的问题
1. 编译器的版本和glibc库有对应关系吗,如何查看glibc的版本(glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc),编译器是不是只带glibc被编译生成的 . ...
- 2013 ACM区域赛长沙 H zoj 3733 (hdu 4798) Skycity
题意:一个圆台,底面和顶面半径分别为R,r,然后高度为H,一共F层,每层高度一样,然后要在每层的天花板上贴方格玻璃,方格玻璃要满足以下几个条件: 方格玻璃面积不能小于S,且方格玻璃要围成一个正多边形, ...
- linux内核系列(一)编译安装Linux内核 2.6.18
1.配置环境 操作系统:CentOS 5.2 下载linux-2.6.18版本的内核,网址:http://www.kernel.org 说明:该编译文档适合2.6.18以上的Linux内核版本,只需所 ...
- boost------function的使用(Boost程序库完全开发指南)读书笔记
function是一个函数对象的“容器”,概念上像是c/c++中函数指针类型的泛化,是一种“智能函数指针”.它以对象的形式封装了原始的函数指针或函数对象,能够容纳任意符合函数签名的可调用对象. 因此, ...
- 如何获取web中某个元素的id
1.在原始的web界面上,切换到开发者模式,一般都有快捷键,本机的快捷键为(Ctrl+shift+I) 2.在开发者模式界面的左上角有一个放大镜的工具,点击一下,再去界面中找相应的元素,之后就可以定位 ...
- Install Package and Software
svn http://tortoisesvn.sourceforge.net/ git https://download.tortoisegit.org/ http://git-for-windows ...
- [转]Compact Normal Storage for Small G-Buffers
http://aras-p.info/texts/CompactNormalStorage.html Intro Baseline: store X&Y&Z Method 1: X&a ...
- 微软正式提供Visual Studio 2013正式版下载(附直接链接汇总)
转自 http://www.iruanmi.com/visual-studio-2013/ 微软已经向MSDN订阅用户提供了Visual Studio 2013正式版镜像下载,只是非MSDN用户能够在 ...
- Java NIO与IO的差别和比較
导读 J2SE1.4以上版本号中公布了全新的I/O类库.本文将通过一些实例来简介NIO库提供的一些新特性:非堵塞I/O,字符转换,缓冲以及通道. 一. 介绍NIO NIO包(java.nio.*)引入 ...