可以更好的结局屏幕方向和兼容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的更多相关文章

  1. Beginning Auto Layout Tutorial in iOS 7: Part 3

    How Auto Layout works 在使用auto layout之前,你可能总是使用initWithFrame或者frame, bounds or center属性. 使用约束的好处在于你不需 ...

  2. Beginning Auto Layout Tutorial in iOS 7: Part 6

    Gallery example 屏幕有四个分开的相同的矩形,每个矩形有一个label和一个image view.创建一个Gallery的项目.在Main.storyboard中,拖拉一个view大小为 ...

  3. Beginning Auto Layout Tutorial in iOS 7: Part 4

    A little runtime excursion 为两个button都添加同一个ibaction方法在viewcontroller.m中实现如下的方法:

  4. Beginning Auto Layout Tutorial in iOS 7: Part 2

    Auto Layout to the rescue! 接下来就看看如何使用Auto Layout来实现这个效果. 首先移除viewWillLayoutSubviews方法,选择Main.storybo ...

  5. Swift语言Auto Layout入门教程:上篇

    原文:Beginning Auto Layout Tutorial in Swift: Part 1/2,译者:@TurtleFromMars 开始用自动布局约束的方式思考吧! 更新记录:该教程由Br ...

  6. iOS布局之Auto Layout

    学习资源: <iOS6核心编程>自动布局部分 <iOS6范例经典>自动布局部分 Tutorial: iOS 6 Auto Layout versus Springs and S ...

  7. 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 ...

  8. iOS Programming Auto Layout: Programmatic Constraints 自动布局:通过编程限制

    iOS Programming  Auto Layout: Programmatic Constraints  1.  However, if your views are created in co ...

  9. 【转】使用 Auto Layout 的典型痛点和技巧

    layoutIfNeeded()强制立刻更新布局 原文网址:http://www.jianshu.com/p/0f031606e5f2 官方文档:Auto Layout Guide 加上去年WWDC上 ...

随机推荐

  1. cf979d Kuro and GCD and XOR and SUM

    set做法 正解是trie-- 主要是要学会 \(a\ \mathrm{xor}\ b \leq a+b\) 这种操作 #include <iostream> #include <c ...

  2. Marketing learning-2

    Part three 1.strategies for leadership 1)operational excellence:operational competence 2)performance ...

  3. 简单实现nodejs爬虫工具

    约30行代码实现一个简单nodejs爬虫工具,定时抓取网页数据. 使用npm模块 request---简单http请求客户端.(轻量级) fs---nodejs文件模块.   index.js var ...

  4. 【LoadRunner】loadrunner常见问题汇总

    LoadRunner常见问题1.LR 脚本为空的解决方法: 1.去掉ie设置中的第三方支持取消掉 2.在系统属性-高级-性能-数据执行保护中,添加loadrunner安装目录中的vugen.exe文件 ...

  5. VMware Fusion Pro安装Ubuntu 18.04.1

  6. Form 组件动态绑定数据

    1.Form 组件的作用: a.对用户提交的数据进行验证(form表单/ajax) b.保留用户上次输入的信息 c.可以生成html标签(input表单类的标签) 2..由于form组件中每个字段都是 ...

  7. Swift全栈开发

    前段时间学习了一下Swift web framework-Vapor, 类似于PHP Laravel的web框架. Apple也成立了Server APIs Project, Server-side ...

  8. Callable、Future、FutureTask_笔记

    参考:http://blog.csdn.net/javazejian/article/details/50896505 1.Callable<V>接口 Runnable接口 public ...

  9. mapserver+QGIS+openlayers的安装和配置

    1.下载MS4W,不要怀疑MS4W就是mapserver,只是里面集成了一些其他的工具和库,下载地址:http://www.maptools.org/ms4w/index.phtml?page=dow ...

  10. MYSQL常用命令——【转】

    MYSQL常用命令 1.导出整个数据库mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin ...