Beginning Auto Layout Tutorial in iOS 7: Part 1
可以更好的结局屏幕方向和兼容iphone和ipad的解决方案。
iOS6有一个新的技术auto layout来帮助解决这个问题。这个技术不仅可以支持app不同尺寸下的开发,而且你也不需要为每一种语言创建nib文件或者storyboards。
The problem with springs and struts
你很熟悉autosizing masks,这就是熟知的“springs and struts”模式。autosizing mask决定了当superview大小发生改变时,view会发生什么。例如,当一个view有可变宽度时,如果superview变宽,那么他也会变宽。如果有一个固定的右间距,view的右间距会同superview的右边距保持一致。
创建新的工程StrutsProblem,打开Main.storyboard,在File inspector中去掉Use Autolayout的选项。去掉后storyboard就会用旧的struts-and-springs模式了。
注意:任何使用Xcode 4.5或者更好的创建的新的nib或者storyboard文件默认会开启auto layout选项。这个功能是ios 6及以上版本才有的特性。如果你想用最新的Xcode创建兼容ios5的app,那么你就需要在每一个nib或者storyboard文件中disable这个auto layout选项。通过不选择Use Autolayout复选框。
拖拉三个不同的view到main storyboard中去。
在iPhone Retina 4-inch simulator上运行。旋转后变成如下的图:
实际上你期望的是如下的结果:
左上角的图参数修改,这样会将view固定到左上角的位置,当superview改变大小时,这个view的水平和垂直方向的大小都会改变。
右上角的图参数修改
下方的图参数修改
再次运行后效果如下:
有改善但是padding内边距不对。原因是autosizing masks告知views当superview改变大小的时候他们也要改变大小,但是却没有说明到底改变多少。
为了解决这些问题,你需要在springs and struts模式下通过code来实现。比如你可以通过复写viewWillLayoutSubviews来改变那些需要重新改变大小的控件。
在ViewController.m中
先不要运行app,需要首先还原autosizing masks对于之前三个view的设置,否者会和上面方法起冲突。但是不同尺寸的iphone起到的效果不同,因为上面的事针对4-inch iphone的,如果换成3.5的就会有问题了,因为上面同时也是硬编码。也可以通过相对位置来设定位置可以实现,但是如果ui很复杂那么无疑这是非常耗费时间的。
Beginning Auto Layout Tutorial in iOS 7: Part 1的更多相关文章
- Beginning Auto Layout Tutorial in iOS 7: Part 3
How Auto Layout works 在使用auto layout之前,你可能总是使用initWithFrame或者frame, bounds or center属性. 使用约束的好处在于你不需 ...
- Beginning Auto Layout Tutorial in iOS 7: Part 6
Gallery example 屏幕有四个分开的相同的矩形,每个矩形有一个label和一个image view.创建一个Gallery的项目.在Main.storyboard中,拖拉一个view大小为 ...
- Beginning Auto Layout Tutorial in iOS 7: Part 4
A little runtime excursion 为两个button都添加同一个ibaction方法在viewcontroller.m中实现如下的方法:
- Beginning Auto Layout Tutorial in iOS 7: Part 2
Auto Layout to the rescue! 接下来就看看如何使用Auto Layout来实现这个效果. 首先移除viewWillLayoutSubviews方法,选择Main.storybo ...
- Swift语言Auto Layout入门教程:上篇
原文:Beginning Auto Layout Tutorial in Swift: Part 1/2,译者:@TurtleFromMars 开始用自动布局约束的方式思考吧! 更新记录:该教程由Br ...
- iOS布局之Auto Layout
学习资源: <iOS6核心编程>自动布局部分 <iOS6范例经典>自动布局部分 Tutorial: iOS 6 Auto Layout versus Springs and S ...
- How to Use Auto Layout in XCode 6 for iOS 7 and 8 Development
The Auto Layout is available on the Storyboard for iOS or OS X development since XCode 5. But, I did ...
- iOS Programming Auto Layout: Programmatic Constraints 自动布局:通过编程限制
iOS Programming Auto Layout: Programmatic Constraints 1. However, if your views are created in co ...
- 【转】使用 Auto Layout 的典型痛点和技巧
layoutIfNeeded()强制立刻更新布局 原文网址:http://www.jianshu.com/p/0f031606e5f2 官方文档:Auto Layout Guide 加上去年WWDC上 ...
随机推荐
- vrpie在Visio Studio 中无法调试的问题
最近这这几天一直在研究vrpie,之前不能调试,一调试就出问题,打开那个生成的htm文件是没问题的,最初的解决方法是不通过调试来打可那个htm页面,但是这样比较麻烦,因为经常需要和服务器交互,就只能用 ...
- loj2055 「TJOI / HEOI2016」排序
ref #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- Hotspot GC实现原理
GC扫描 可达性分析的GC Roots主要是全局性引用或在Stack Frame中 ,现在的应用仅仅方法区往往就有几百兆,这样要这个检查这里面的引用,就必然会消耗很多时间,效率很低. 分析工作在一个保 ...
- IOS开发---菜鸟学习之路--(六)-UITableView几个方法的使用说明
对于UITableView的基础使用我这边就不做重复介绍了 我重点就来介绍下如何实现大部分新闻的界面.也就是第一条记录显示大图片下面加一段文字说明 然后剩下来的内容全部显示为文字图片的格式 其实要做到 ...
- python中subprocess.Popen的args和shell参数的使用
subprocess模块定义了一个类: Popen class subprocess.Popen( args, bufsize=0, executable=None, ...
- 工作中用到的安卓日志相关命令(logcat)
1. 打印安卓日志,在cmd中使用adb shell logcat:在adb shell下直接打logcat 2. 如果不想打印占用终端,则加个&号,即logcat & 3. 如果想把 ...
- Python面向对象之私有方法(4)
类里面有很多成员修饰符,用来修饰各种属性 (1)私有属性,只有内部的方法可以访问 class Foo: xo = 'xo'#表明是公共的,内部外部都可以访问 __ox = '私有属性'#私有属性,只有 ...
- EasyUi DataGrid 获取选中行的checkbox
EasyUi DataGrid 获取选中行的checkbox var checked = $(":checkbox[name=ID]:checked"); console.log( ...
- Linux系统——常见的系统调用
本文列出了大部分常见的Linux系统调用,并附有简要中文说明. 以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数.这可能是你在互联网上所能看到的唯一一篇中文注释的 ...
- Codeforces Round #364 (Div. 2) B 标记
B. Cells Not Under Attack time limit per test 2 seconds memory limit per test 256 megabytes input st ...