Autolayout 03
Debugging in Code
有两个调试layout问题的阶段。
1. Map from “this view is in the wrong place” to “this constraint (or these constraints) is (are) incorrect.”
2. Map from “this constraint is incorrect” to “this code is incorrect.”
To debug a problem with Auto Layout
Identify the view with an incorrect frame.
It may be obvious which view has the problem; if it is not, you may find it helpful to use the NSViewmethod _subtreeDescription to create a textual description of the view hierarchy.
If possible, reproduce the issue while running under the Auto Layout template in Instruments.
Find the bad constraint or constraints.
To get the constraints affecting a particular view, use
constraintsAffectingLayoutForOrientation: in OS X or
constraintsAffectingLayoutForAxis: in iOS.
4.If it’s not obvious which constraint is wrong at this point, visualize the constraints on screen by passing the constraints to the window using visualizeConstraints:.
When you click a constraint, it is printed in the console. In this way you can you can determine which is which, and typically identify which is incorrect.
At this point you may be informed that the layout is ambiguous.
5. Find the code that’s wrong.
Sometimes, once you have identified the incorrect constraint, you will know what to do to fix it.
If this is not the case, then use Instruments to search for the pointer of the constraint (or some of its
description). This will show you interesting events in that constraint’s lifecycle—its creation, modification,
installation into windows, and so on. For each of these you can see the backtrace where it happened.
Find the stage at which things went awry, and look at the backtrace. This is the code with the problem.
Auto Layout by Example
Auto Layout 使得自动解决复杂的layout问题很容易。而且不需要手动的操作。通过创建正确的约束,你可以创建在代码中难以掌控的layout。例如同等空间的view调整适应方向或者大小的变动。scroll view中作用于滚动内容大小的元素。或者scroll view中不滚动的元素。
Using Scroll Views with Auto Layout
当你在app中使用auto layout时,scroll view将会是一个挑战。滚动内容大小必须设置正确用户才能够滚动到可视区域。例如,如果你需要为了地图缩放和说明在scroll view的顶部设定一个contextual view,是很难确定这些元素不会跟着其他的content一起滚动。
Controlling Scroll View Content Size
scroll view的content大小取决于他的子节点的约束。
To set the size of a scroll view 如何设置scroll view的大小
Create the scroll view.创建scroll view
Place the UI element inside it. 在scroll view中放置UI元素
Create constraints that fully define the width and height of the scroll view content.创建能够定义scroll view content高度和宽度的约束
必须保证为scroll view中的每一个子view都定义了约束。例如,当为一个没有固定content size的view定义约束时,你需要不仅仅定义一个leading edge约束,你必须也创建trailing edge, width, 和高度约束。不能缺少从一个scroll view edge到其他的约束。
Creating Anchored Views Inside a Scroll View 在scroll view中创建固定的views
你可能发现有时候你需要在scroll view中创建一块无法滚动的区域。你通过创建一个container view来完成这个目标。
To lock a view inside a scroll view
Create a container view to hold the scroll view. 创建一个container view来保存这个scroll view
Create the scroll view and place it in the container view with all edges equal to zero points. 创建一个scroll view并且把他放置在所有的edges都是0的container view中
Create and place a subview inside of the scroll view. 在scroll view中创建并放置一个subview
Create constraints from the subview to the container view.创建这个subview痛container view之间的约束
以下是例子的具体执行步骤:
首先,创建一个container view来包含之后的scroll view。把container view大小设置为想要的scroll view的大小。
然后,在这个container view中创建一个scroll view,并且重新规定scroll view的大小所有的边框都覆盖到container view中,设置distance为0
然后创建一个text view到scroll view中。
当放置好text view后,创建从text view到container view的约束。创建约束讲text view锚到container view中。确保scroll view不会滚动这个text view。
为了在view层中创建一个贯穿多个view的约束,一般简单的方法是选择这个view,然后ctrl+drag到interface builder outline view的container view中去。
在约束的覆盖图中,设置想要的约束。
Autolayout 03的更多相关文章
- This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.
-- :::] This application is modifying the autolayout engine from a background thread, which can lead ...
- [BS] 小知识点总结-03
1.Autolayout中“constrain to margins” Autolayout中的页面边距的问题ios8以后的UIView增加了layoutMargins属性,在Storyboard/I ...
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...
- iOS系列 基础篇 03 探究应用生命周期
iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...
- Masonry介绍与使用实践:快速上手Autolayout
1 MagicNumber -> autoresizingMask -> autolayout 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 w ...
- javaSE基础03
javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...
- 利用代码添加autolayout约束
1.概述 通常我们通过storyboard能够完成的,代码也能够完成,所以这里介绍下代码实现约束的添加,通常我们不这么干(在不使用第三方框架的情况下,使用系统自带的类添加约束特别繁琐),所以这里仅仅简 ...
随机推荐
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- python 学习分享-迭代器与生成器篇
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...
- c++ 吕凤翥 第六章 类和对象(二)
c++ 吕凤翥 第六章 类和对象(二) 指针 引用 和数组 一:对象指针和对象引用 1.指向类的成员的指针 分为指向成员变量和指向成员函数两种指针 成员变量的格式: 类型说明符 类名: ...
- 集训队日常训练20181110 DIV2 题解及AC代码
4375: 孪生素数 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 324 ...
- Map的常用方法keySet()、entrySet()
Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet()等方法,keySet()方法返回值是Map中key值的集合:en ...
- PHP中create_function的用法总结
在php中,函数create_function主要用来创建匿名函数,有时候匿名函数可以发挥它的作用. 1.测试一 测试一主要用来循环替换数组中多个值的<与>,我们用array_map加上c ...
- GDOI2018前夕 错误总结
算法易错点 $FFT$ 1.注意精度,以及是否取整 2.注意$complex$类不要写错,复数乘法是这样的: complex operator *(const complex &b){retu ...
- python常用内建函数
1.input 读取控制台的输入,输出的是字符串 2.enumerate 遍历数组的时候,能够将index 和item同时返回,返回的每一项包含index,item 3.isinstance(obje ...
- django学习——通过get_FOO_display 查找模型中的choice值
在django的models.py 中,我们定义了一些choices的元组,类似一些字典值,一般都是下拉框或者单多选框,例如 0对应男 1对应女等. class Area(models.Model): ...
- div 的相对定位与绝对定位
网 上也有不少使用div + css进行布局的教程,却存在很多缺陷,一是对css的布局模型讲解不清楚,让人很难理解相对定位.浮动等概念:二是虽然避免了“表格套表格”的缺点,却 带来了“div 套 di ...