上一篇说到了约束就是等式和不等式。仅仅知道其原理还是没法拉出符合需求的线。所以这一篇主要看来什么是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. Java 8 – Filter a null value from a Stream

    Java 8 – Filter a null value from a Stream package com.mkyong.java8; import java.util.List;import ja ...

  2. StringBoot集成Rabbit Redis和ack机制双重保险,保障消息一定能够正确的消费

    转: StringBoot集成Rabbit,根据业务返回ACK 原文链接 : http://www.jianshu.com/p/baed9ec92410 为了维护消息的有效性,当消费消息时候处理失败时 ...

  3. appium通过同级别(兄弟关系)元素找到元素

    在做appium测试用例的时候,要获取金额值,用uiautomatorviewer查看该元素,该元素没有特别明显的个性特点,唯一有特点的定位是有content-desc值,但是该值是变动的,所以无法通 ...

  4. Python 的黏包问题

    Client 端内的代码: #Author:BigBao #Date:2018/7/4 import socket import struct client=socket.socket(socket. ...

  5. SpringBoot不使用模板引擎直接返回html

    一.在resource目录下面建立文件夹,里面方静态页面. 路径:src\main\resources\static\page\index.html 访问:http://localhost:8080/ ...

  6. jmeter http协议---cookie处理

    使用jmeter测试的http接口的时候,经常遇到需要cookie做免登录等作用的情况,jmeter如何在测试http接口的时候加载所需cookie呢?主要分两步 一. 收集对应站点的cookie 1 ...

  7. Atitit 找人软福利建设 技术团队建设大概流程

    Atitit 找人软福利建设 技术团队建设大概流程 火车公司有免费车座,餐馆有免费饭吃.. 软件公司嘛,就是软件资源,知识了...技术... 培训体系 大概的知识库体系..让他知道来到我们团队有着很高 ...

  8. IOS解惑(1)之@property(nonatomic,getter=isOn) BOOL on;中的getter解惑

    1 问题: @property(nonatomic,getter=isOn) BOOL on; 中的getter = isOn的含义? 2 答案: 如果这个property是 BOOL on, 那么O ...

  9. TCPConnectionTermination

    http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for- ...

  10. AWS产品目录

    计算 Amazon EC2:弹性虚拟机 AWS Batch:批处理计算 Amazon ECR:Docker容器管理 Amazon ECS:高度可扩展的快速容器管理服务 Amazon EKS:在AWS上 ...