AutoLayout——何为intrinsic content size
上一篇说到了约束就是等式和不等式。仅仅知道其原理还是没法拉出符合需求的线。所以这一篇主要看来什么是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的更多相关文章
- 转:AutoLayout中的Content Hugging 和 Content Compression Resistance
OS6中引入了AutoLayout,极大的方便了UI元素的布局,现在已经过去一年了,并且大部分设备的系统也已经升级到了iOS6,是时候要使用此项技术了. 在AutoLayout的学习中有两个概念官方文 ...
- iOS开发之AutoLayout中的Content Hugging Priority和 Content Compression Resistance Priority解析
本篇博客的内容也不算太复杂,算是AutoLayout的一些高级的用法.本篇博客我们主要通过一些示例来看一下AutoLayout中的Content Hugging Priority以及Content C ...
- 在代码中使用Autolayout – intrinsicContentSize和Content Hugging Priority
我们继续来看在代码中使用Autolayout的话题.先说intrinsicContentSize,也就是控件的内置大小.比如UILabel,UIButton等控件,他们都有自己的内置大小.控件的内置大 ...
- 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...
- Notes of learning AutoLayout
在XCode5中,如果我们添加一个Button或者Label,或者其他的什么标准View,而不设置任何constraints,IB会自动生成constraints,而这些constraints是fix ...
- 先进的自动布局工具箱(autolayout)
原文:Advanced Auto Layout Toolbox 这篇文章并没有具体介绍自动布局的一些基本概念,主要讲解了一些高级的使用方法和调试技巧,文中有的句子比较长,意思也有点难懂,所以需要静下心 ...
- iOS 8 AutoLayOut入门
http://blog.csdn.net/asdfg13697116596/article/details/42562565 iOS 8 AutoLayOut入门自从iOS6带来Auto Layout ...
- AutoLayout深入浅出五[UITableView动态高度]
本文转载至 http://grayluo.github.io//WeiFocusIo/autolayout/2015/02/01/autolayout5/ 我们经常会遇到UITableViewCell ...
- iOS 自动布局 Autolayout 优先级的使用
一.约束的优先级 0.屏幕适配 发展历程 代码计算frame -> autoreszing(父控件和子控件的关系) -> autolayout(任何控件都可以产生关系) -> siz ...
随机推荐
- NPM Node.js 包管理
1.NPM 简介 1.1 NPM Node.js® 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可方便地构建快速,可扩展的网络应用程序的平台.Node.js 使用事件驱动, ...
- Mac Vim 编辑器
1.常用命令 /xxx 查找xxx n 执行上一次查找 0 到行首 w 光标往后移动一个词 b 光标往前移动一个词 x 删除当前一个字符 dw 删除一个单词 D 删除到行尾 dd 删除整行 V 选中整 ...
- ORA-01917: user or role 'PDB_DBA' does not exist
在使用seed PDB创建新的PDB的时候,报了以下错误提示: SQL> create pluggable database pdb2 admin user admin1 identified ...
- cucumber java从入门到精通(1)初体验
cucumber java从入门到精通(1)初体验 cucumber在ruby环境下表现让人惊叹,作为BDD框架的先驱,cucumber后来被移植到了多平台,有cucumber-js以及我们今天要介绍 ...
- Maven pom.xml中的元素modules、parent、properties以及import(转)
前言 项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单:maven的核心是pom.xml,那么我就它 ...
- scrapy定时执行抓取任务
在ubuntu环境下,使用scrapy定时执行抓取任务,由于scrapy本身没有提供定时执行的功能,所以采用了crontab的方式进行定时执行: 首先编写要执行的命令脚本cron.sh #! /bin ...
- SVN配置钩子文件限制提交文件时必须填写更新日志
进入相应SVN仓库hooks目录,编辑文件pre-commit #!/bin/sh REPOS="$1"TXN="$2" SVNLOOK=/usr/bin/sv ...
- vue2.x 路由懒加载 优化打包体积
当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 结合 Vue 的异步组 ...
- 记一次docker问题定位(perf,iostat等性能分析)
背景 最近参与的项目是基于 OpenStack 提供容器管理能力,丰富公司 IaaS 平台的能力.日常主要工作就是在开源的 novadocker 项目(开源社区已停止开发)基础上进行增强,与公司的其他 ...
- Socket网络编程--FTP客户端(2)(Windows)
上一篇FTP客户端讲到如果制作一个简单的FTP客户端,功能实现了,但是后面我们发现了问题,就是FTP是使用明文进行操作的.对于普通情况来说就无所谓了.但有时候要安全的一点的话,就应该使用FTP的安全版 ...