先说说上次发的版本更新Demo吧。我也是最近才知道,苹果大概从今年3月份开始明确规定,app中不得包含检测应用程序更新的程序,但是不代表以后的应用程序就不提示你更新app。因为这件检测更新的事情开始由苹果帮你做了,所以记得别写有关软件更新的code了。

        我说了上面的事情,可能会有想到QQ,微信,新浪微博等一些软件怎么内置了app更新的程序苹果就通过了,这个可能是这些大公司会以公司的名义给苹果公司发送邮件进行私下沟通,当然这需要你的公司有足够的影响力。

        好了,接下来转入正题,说说AutoLayout吧,其实AutoLayout并不是多么新的技术。他是IOS6 退出的自动布局方式后来IOS8又对接口进行了增强,其实也就是为了当时新出的iPhone5 4.0寸应用程序开发推出的一种解决方案。在Xib或者storyboard中是通过Constraint(约束)实现的。在git网上有第三方封装好的简单易用的AutoLayout库(Masonry),自己不是太喜欢使用,还是老原因,他不是苹果提供的API所以不太喜欢使用,这次给大家介绍的苹果提供的API。

        我不喜欢xib和storyboard这东西,一项喜欢纯代码,这次给大家提供的Demo同样是纯代码。

        想通过代码实现AutoLayout 布局,首先我们先来了解下苹果给我提供的API接口,了解了他你才能上手写出自动布局的代码。

NSLayoutConstraint.h就是苹果给我提供的接口,你也可以在Xcode中敲出NSLayoutConstraint,按住command键进去看看类库

内容如下:

typedef NS_ENUM(NSInteger, NSLayoutRelation) {
    NSLayoutRelationLessThanOrEqual = -1,                //小于等于
    NSLayoutRelationEqual = 0,                                    //等于
    NSLayoutRelationGreaterThanOrEqual = 1,          //大于等于
};

typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
    NSLayoutAttributeLeft = 1,                                       //左侧
    NSLayoutAttributeRight,                                            //右侧
    NSLayoutAttributeTop,                                             //顶部
    NSLayoutAttributeBottom,                                        //底部
    NSLayoutAttributeLeading,                                    //行距
    NSLayoutAttributeTrailing,                                    
    NSLayoutAttributeWidth,                                        //宽
    NSLayoutAttributeHeight,                                        //高
    NSLayoutAttributeCenterX,                                    //X 方向上中心
    NSLayoutAttributeCenterY,                                    //Y 方向上中心
    NSLayoutAttributeBaseline,
    NSLayoutAttributeLastBaseline = NSLayoutAttributeBaseline,
    NSLayoutAttributeFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0),

这些都是类似web开发中盒子模型的思想,某一个控件距离顶部、左侧、下部、和右侧的间距    

NSLayoutAttributeLeftMargin NS_ENUM_AVAILABLE_IOS(8_0),
    NSLayoutAttributeRightMargin NS_ENUM_AVAILABLE_IOS(8_0),
    NSLayoutAttributeTopMargin NS_ENUM_AVAILABLE_IOS(8_0),
    NSLayoutAttributeBottomMargin NS_ENUM_AVAILABLE_IOS(8_0),
    NSLayoutAttributeLeadingMargin NS_ENUM_AVAILABLE_IOS(8_0),
    NSLayoutAttributeTrailingMargin NS_ENUM_AVAILABLE_IOS(8_0),
    NSLayoutAttributeCenterXWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
    NSLayoutAttributeCenterYWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
    
    NSLayoutAttributeNotAnAttribute = 0
};

typedef NS_OPTIONS(NSUInteger, NSLayoutFormatOptions) {
    NSLayoutFormatAlignAllLeft = (1 << NSLayoutAttributeLeft),
    NSLayoutFormatAlignAllRight = (1 << NSLayoutAttributeRight),
    NSLayoutFormatAlignAllTop = (1 << NSLayoutAttributeTop),
    NSLayoutFormatAlignAllBottom = (1 << NSLayoutAttributeBottom),
    NSLayoutFormatAlignAllLeading = (1 << NSLayoutAttributeLeading),
    NSLayoutFormatAlignAllTrailing = (1 << NSLayoutAttributeTrailing),
    NSLayoutFormatAlignAllCenterX = (1 << NSLayoutAttributeCenterX),
    NSLayoutFormatAlignAllCenterY = (1 << NSLayoutAttributeCenterY),
    NSLayoutFormatAlignAllBaseline = (1 << NSLayoutAttributeBaseline),
    NSLayoutFormatAlignAllLastBaseline = NSLayoutFormatAlignAllBaseline,
    NSLayoutFormatAlignAllFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0) = (1 << NSLayoutAttributeFirstBaseline),
    
    NSLayoutFormatAlignmentMask = 0xFFFF,
    
    /* choose only one of these three
     */
    NSLayoutFormatDirectionLeadingToTrailing = 0 << 16, // default
    NSLayoutFormatDirectionLeftToRight = 1 << 16,
    NSLayoutFormatDirectionRightToLeft = 2 << 16,  
    
    NSLayoutFormatDirectionMask = 0x3 << 16,  
};


以上只是 NSLayoutConstraint类库中的一部分,我也不是全明白,也是正在探索中。


下面给大家一个简单的页面的Demo供大家研究参考。希望大家给我发消息分享你们的开发经验,让大家一起学习,一起进步。