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模式了。

Disable autolayout

注意:任何使用Xcode 4.5或者更好的创建的新的nib或者storyboard文件默认会开启auto layout选项。这个功能是ios 6及以上版本才有的特性。如果你想用最新的Xcode创建兼容ios5的app,那么你就需要在每一个nib或者storyboard文件中disable这个auto layout选项。通过不选择Use Autolayout复选框。

拖拉三个不同的view到main storyboard中去。

Design of the StrutsProblem app

iPhone Retina 4-inch simulator上运行。旋转后变成如下的图:

Landscape looks bad

实际上你期望的是如下的结果:

What landscape is supposed to look like

左上角的图参数修改,这样会将view固定到左上角的位置,当superview改变大小时,这个view的水平和垂直方向的大小都会改变。

Autosizing top-left view

右上角的图参数修改

Autosizing top-right view

下方的图参数修改

Autosizing bottom view

再次运行后效果如下:

Landscape still looks bad

有改善但是padding内边距不对。原因是autosizing masks告知views当superview改变大小的时候他们也要改变大小,但是却没有说明到底改变多少。

为了解决这些问题,你需要在springs and struts模式下通过code来实现。比如你可以通过复写viewWillLayoutSubviews来改变那些需要重新改变大小的控件。

Ctrl-drag outlet property

ViewController.m

先不要运行app,需要首先还原autosizing masks对于之前三个view的设置,否者会和上面方法起冲突。但是不同尺寸的iphone起到的效果不同,因为上面的事针对4-inch iphone的,如果换成3.5的就会有问题了,因为上面同时也是硬编码。也可以通过相对位置来设定位置可以实现,但是如果ui很复杂那么无疑这是非常耗费时间的。

 

转载于:https://www.cnblogs.com/lisa090818/p/4187082.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值