iOS8 Layout Margins

国外作者写的一篇文章,向我们介绍了一个iOS8中的一个新属性,

var layoutMargins: UIEdgeInsets

我们在IB(Interface Builder)中通过按住control键来设置各个UIView之间的方位关系之后,点击这个位置关系属性,在属性面板中可能能看到这个Relative to margin是被勾选的。

一般默认情况下,这个Relative to margin是默认会被勾选上的,如果你不想让系统默认勾选这个选项,那么请在拖拉时同时按住control和alt键,然后我们也可以通过设置layoutMargins属性来调整这个值,默认值是:

UIEdgeInsets(top: 8, left: 8, bottom: 8, right: 8)

设置的代码:

let version = (UIDevice.currentDevice().systemVersion as NSString).doubleValue
if version >= 8 {
 myView.layoutMargins = UIEdgeInsets(
   top: 0,
   left: 40,
   bottom: 0,
   right: 0)
}

另外还有一个属性:

var preservesSuperviewLayoutMargins: Bool

文章可能会看的不太明白,我也是读了两遍看明白的,preserves这个单词的基本意思是保护,保持,再根据文章的解释,可以这么理解:

1.首先明白一下层级关系,红色视图包含棕色视图,棕色视图包含紫色视图。

2.红色视图layoutMargins属性的left值为40,但是棕色视图之所以位于红色视图最左侧,是因为它们的leading位置关系中Relative to margin没有开启。

3.棕色视图layoutMargins属性的left值为2,紫色视图与棕色视图之间的leading位置约束关系是带Relative to margin的,所以能看到紫色视图偏移了两个像素。

4.棕色视图preservesSuperviewLayoutMargins:

4.1 不开启情况下,各自维护各自的关系,互不干扰,没什么影响。

4.2 开启情况下,相当于棕色视图把红色视图的margin值一并传递给了紫色视图,而且两个值是叠加的关系,此时紫色视图相对于棕色视图左侧的margin值应该是40+2。

另外当layoutMargins的各个属性值发生变化时,有方法通知:

override func layoutMarginsDidChange() {
    println("layoutMarginsDidChange")
}

基本上就是这样了,代码在XCode LayoutMargins Project

3Q for Read It. ^_^

时间: 2024-10-29 04:56:05

iOS8 Layout Margins的相关文章

[iOS] 初探 iOS8 中的 Size Class

转自:http://www.itnose.net/detail/6112176.html ? ? ? 以前和安卓的同学聊天的时候,谈到适配一直是一个非常开心的话题,看到他们被各种屏幕适配折磨的欲仙欲死,心里真替他们高兴.不过在做到 iPhone 和 iPad 的适配的时候,一个页面需要配置多个 xib 进行开发还是个很头疼的事情.再加上 iPhone6 和 iPhone6 plus 的发布,适配似乎也变得麻烦起来.今天了解了 iOS8 中的 Size Class 之后,真的笑,笑出声. 简介 先

你可能需要为你的APP适配iOS11

WeTest 导读 iOS 11 为整个生态系统的 UI 元素带来了一种更加大胆.动态的新风格. 本文介绍了iOS11在UI方面做了哪些更新,有些更新可以为用户提供更加完美的体验,但也有的可能会给目前的APP带来异常bug. 前言 前几天发现在做的APP在iOS11系统上动画有异常,在其他系统的设备上都是正常的,动画的操作是观察tableView的contentOffset变化后执行的,异常动画发生在tableView reloadData之后,也就是说tableView reloadData之

iOS11及Xcode9适配问题汇总

UIScrollView and UITableView的新特性 ScrollView 如果有一些文本位于UI滚动视图的内部,并包含在导航控制器中,现在一般navigationContollers会传入一个contentInset给其最顶层的viewController的scrollView,在iOS11中进行了一个很大的改变,不再通过scrollView的contentInset属性了,而是新增了一个属性:adjustedContentInset,通过下面两种图的对比,能够表示adjustCo

UITableView API大百科

UITableView接口 常规 - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style 初始化方法,调用init方法初始化时默认style为UITableViewStylePlain @property (nonatomic, readonly) UITableViewStyle style; 表视图类型,包括UITableViewStylePlain和UITableViewStyleGrouped @

【Swift】iOS开发小技巧(一)

前言 边开发边学习,边攒经验,汇总一下记录到这里 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 1.隐藏/显示密码功能 光设置secureTextEntry还不行,你会发现UITextField在切换到显示密码时会多一个空字符,看着巨别扭,需要在更改secureTextEntry后进行如下设置: let pwd = psdField.text        self.psdFiel

简便的自动布局,对UIStackView的个人理解!

序言: 更新了很久的Linux,我怕朋友们都视觉疲劳了,今天就更新在学ios开发时候,对一些知识点的理解.希望各位会喜欢! 正文: UIStackView 类提供了一个高效的接口用于平铺一行或一列的视图组合,stackView提供了高效的单行单列自动布局的手段,一般情况下,我们不需要对stackView.subviews做任何约束,只需要通过对stackView的axis, distribution, alignment, spacing属性进行修改: axis(轴向) 属性决定了 stack

iOS 9: UIStackView入门

本文转自http://www.cocoachina.com/ios/20150623/12233.html 本文由CocoaChina译者candeladiao翻译,欢迎参加我们的翻译活动.原文:iOS 9: Getting Started with UIStackView 同iOS以往每个迭代一样,iOS 9带来了很多新特性.UIKit框架每个版本都在改变,而在iOS 9比较特别的是UIStackView,它将从根本上改变开发者在iOS上创建用户界面的方式.本文将带你学习怎样使用UIStack

自定义UITableView的Seperator

在默认配置中 ,UITableView的Cell之间的Seperator左边总是空出一块,即使在Storyboard中设置为0 ,也没有效果 需要在代码中进行配置,在ViewController中实现如下方法 -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { // Remove seperato

使用 StoryBoard 实现左右按钮切换图片的浏览效果

关键技能:使用故事板进行布局时,点击选中控件(组件)并按住 control 键向某个方向拖动,产生一条实线,然后弹出的窗口可以设置控件(组件)的布局约束条件:从而实现自动布局 AutoLayout 效果. 效果如下: iPhone 5s iPhone 6 ?iPhone 6 Plus ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UIViewController 4 @property (s