上一篇说到了约束就是等式和不等式。仅仅知道其原理还是没法拉出符合需求的线。所以这一篇主要看来什么是intrinsic content size,以及它有什么用。

在Xcode中,差点儿全部控件或视图,都有这个属性。在size inspector界面

imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Xcode中的intrinsic content size" title="">

开发中用到的一些控件或视图,本身就自带大小,比方UIButton控件,设置完title后就能知道这个UIButton是文字的大小再加上两个固定的button margin。

像这样的控件或视图本身就带有的高度、宽度。就叫做intrinsic content size(固定内容尺寸)。

一些经验分享?

普通情况下,我是通过四种操作来设置布局的。

- 右键拉线。

- Align面板做对齐操作(position)

- pin面板做边距或尺寸操作(size)

- Resolve面板用来更新约束或者更新边框

后三种就是xib或storyboard界面的右下角的三个小button

自己拉约束的时候,总会碰到Xcode报红色或黄色的错(例如以下图),曾经怎么拉都没办法拉好约束。乃至于将全部该加的都加上了。但还是没能达到想要的效果。这让人非常恼怒。

只是当你懂了一点英语,知道报的错是什么意思,基本就都能够攻克了。

imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="红色或黄色错误" title="">

像以下这样的,将鼠标放在Icon上(报错的地方),就会有提示,不得不说Xcode这个IDE已经相当好用了。除了偶尔崩溃受不了。



提示已经说得非常明显了。AutoLayout须要Icon的Y轴位置或者高度才干完毕对其位置或尺寸的判断。所以咱们通过加Y轴的位置或者高度就能够了。当然详细要加Y轴位置还是高度得看你的需求。最好还是都试一试。非常easy就能懂的。

固定内容尺寸究竟什么用?

一个关于button的样例:

在下图中出现的黄色线,这是什么意思呢?刚開始我也看不明确,Xcode都报warning了。

依照提示去改动的话又达不到我想要的效果,由于黄色线是想要我把中间这个button的大小调整到黄色框的大小。这明显不符合我的须要。

好吧说说为什么会出现黄色虚线框,这就是固定内容尺寸的原因。我给中间这个MidButton设置的背景图的大小是75*75的。而如今MidButton被我缩小到35*35,这时候Xcode是依据图片的原大小来判断MidButton的固定内容尺寸的。

这时候就坑爹了。执行后的结果例如以下。

似乎唯一的方法仅仅能是调整图片的大小了。

imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="黄色线" title="">



妥协的解决的方法:设定MidButton的宽和高。

![Uploading Paste_Image_791544.png …]

加上宽度和高度的约束后,就能够临时攻克了。只是却没办法依据不同机型的宽度去适配。

所以。看到这里应该就明确固有内容尺寸是什么了。要用AutoLayout的话这个概念非常关键。之前跟着斯坦福视频的老头子做过一阵子的matchismo。一种相似卡牌的游戏。里面有16个button。当时用AutoLayout做真是太烦躁了,全然没法做适配,由于仅仅有一种素材,而AutoLayout去渲染后默认出现的是控件或图片的固有内容尺寸,所以当时仅仅能做一种机型的布局。去github逛了一圈也是有这个问题存在。所以用AutoLayout的话,button图片的大小非常重要,特别是要适配的时候。一定要配套每种机型的素材。

什么控件有固定内容尺寸?

它就用于辅助系统计算布局。以下看看有哪一些控件或视图是自带固定内容尺寸的。

  • UIView和NSView(OSX)没有固定内容尺寸
  • Sliders 在iOS中仅仅定义了宽度,而在OSX中则有可能是宽度、高度或两者
  • Labels ,buttons,switches。text fields,都有高度和宽度
  • Text views 和image views 固定内容宽度可变

总结

假设你有非常多有背景图片的button须要布局的话,autolayout慎用,不然当你调不出想要的效果又不知道原因在哪的时候回特别抓狂。总之你要随便调整控件或视图的内容,不依照固有内容尺寸的话。是不大可能的了。苹果这么去规定也是有其道理的。毕竟人家都给出了UI的设计规范了嘛。依照规范来,通过审核也easy。

AutoLayout——何为intrinsic content size的更多相关文章

  1. 转:AutoLayout中的Content Hugging 和 Content Compression Resistance

    OS6中引入了AutoLayout,极大的方便了UI元素的布局,现在已经过去一年了,并且大部分设备的系统也已经升级到了iOS6,是时候要使用此项技术了. 在AutoLayout的学习中有两个概念官方文 ...

  2. iOS开发之AutoLayout中的Content Hugging Priority和 Content Compression Resistance Priority解析

    本篇博客的内容也不算太复杂,算是AutoLayout的一些高级的用法.本篇博客我们主要通过一些示例来看一下AutoLayout中的Content Hugging Priority以及Content C ...

  3. 在代码中使用Autolayout – intrinsicContentSize和Content Hugging Priority

    我们继续来看在代码中使用Autolayout的话题.先说intrinsicContentSize,也就是控件的内置大小.比如UILabel,UIButton等控件,他们都有自己的内置大小.控件的内置大 ...

  4. 使用Autolayout实现UITableView的Cell动态布局和高度动态改变

    本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...

  5. Notes of learning AutoLayout

    在XCode5中,如果我们添加一个Button或者Label,或者其他的什么标准View,而不设置任何constraints,IB会自动生成constraints,而这些constraints是fix ...

  6. 先进的自动布局工具箱(autolayout)

    原文:Advanced Auto Layout Toolbox 这篇文章并没有具体介绍自动布局的一些基本概念,主要讲解了一些高级的使用方法和调试技巧,文中有的句子比较长,意思也有点难懂,所以需要静下心 ...

  7. iOS 8 AutoLayOut入门

    http://blog.csdn.net/asdfg13697116596/article/details/42562565 iOS 8 AutoLayOut入门自从iOS6带来Auto Layout ...

  8. AutoLayout深入浅出五[UITableView动态高度]

    本文转载至 http://grayluo.github.io//WeiFocusIo/autolayout/2015/02/01/autolayout5/ 我们经常会遇到UITableViewCell ...

  9. iOS 自动布局 Autolayout 优先级的使用

    一.约束的优先级 0.屏幕适配 发展历程 代码计算frame -> autoreszing(父控件和子控件的关系) -> autolayout(任何控件都可以产生关系) -> siz ...

随机推荐

  1. 关于PKCS的文档资料

    关于PKCS的文档资料,在这里查找: http://www.emc.com/emc-plus/rsa-labs/standards-initiatives/public-key-cryptograph ...

  2. 公网用户接入NAT后面的freeswitch配置

    大致网络示意和终端号码: 客户端侧: 终端号码(1019)终端IP(192.168.1.15)+ 网关(192.168.1.1) + 路由器公网IP(动态地址) 服务器侧: 防火墙(181.92.2. ...

  3. [Err] ORA-00911: 无效字符

    使用navicat执行从pw中导出的sql语句时报[Err] ORA-00911: 无效字符  这个错误. 经过分析后发现,是因为某个表的id中的类型设置用的中文括号包起来的. 但是不知道为什么sql ...

  4. [CTCI] 双栈排序

    双栈排序 题目描述 请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中. 给定一个int[] numbers(C++中 ...

  5. 关于iReport-5.6.0之前版本 “无法启动”或者“一开就关闭”的 某些原因

    在经过Google搜索后.外国的大神说: We don't support Java 8 right now. Support will be added in next versions. 大概意思 ...

  6. Rational Rose 2003 下载及破解方法

    FROM:http://blog.csdn.net/fenglibing/archive/2007/08/17/1747693.aspx 这么好的东西,不拿来出分享,我对不起原作者呀.但是我这里不知道 ...

  7. 如何判断 ios设备的类型(iphone,ipod,ipad)

    功能函数: -(bool)checkDevice:(NSString*)name { NSString* deviceType = [UIDevice currentDevice].model; NS ...

  8. shouldAutoRotate Method Not Called in iOS6

    转自:http://stackoverflow.com/questions/13588325/shouldautorotate-method-not-called-in-ios6 参考1:http:/ ...

  9. 我的IT之路2013(一)

    一眨眼又到了写总结的时候了.废话不多说了,直接切入正题. 春节过后 从春节前开始大概半个月的时间就开始在TKY做物资管理项目,中间穿插了两个考试和J2EE的学习:结束TKY工作后继续深入学习J2EE, ...

  10. Shell脚本判断内容为None的方式

    1.判断变量 read -p "input a word :" word if [ ! -n "$word" ] ;then echo "you ha ...