zhangabc.com
域名年龄: 14年5个月HTTP/1.1 200 OK 服务器:GitHub.com 访问时间:2014年10月31日 05:21:15 类型:text/html; charset=utf-8 Transfer-Encoding: chunked 连接:keep-alive 修改日期:2013年11月19日 18:29:08 过期时间:2014年10月31日 05:31:15 缓存控制:max-age=600 动作:Accept-Encoding Content-Encoding: gzip 动作:Accept-Encoding 网站编码:utf-8
entrepreneurial developer. Aug 3rd, 2013 Comments mobile Autolayout in iOS 最近终于放弃了使用frame做视图的定位,改用storyboard + …">BlogArchivesEr.Z phper + iOS develpor => entrepreneurial developer.Aug 3rd, 2013CommentsmobileAutolayout in iOS最近终于放弃了使用frame做视图的定位,改用storyboard + Autolayout + segue 来折腾视图的排列、定位、转场动画,感觉iOS开发越来越方便了。本文总结一下关于autolayout的学习和使用。Autolayout的优势在autolayout之前,一般会使用frame来定位视图中的元素。frame是决定视图位置与宽高的属性,其值为CGRect对象, 可以用下面的方法来定义。CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)CGRect对象定义中的四个参数为 横坐标、纵坐标、宽、高。把CGRect对象赋值并设置到UIView的frame属性,就可以实现视图的大小及位置的定义。理论上这种方法是可以解决所有的问题,不过在实际操作中,有两种我遇到的情况使用frame不那么方便:设备翻转需要视图位置做出相应的调整;可能发生内部元素位置变化的复用视图,如下图中的tableViewCell(截图来自《cnBeta X 非官方IT新闻阅读器》,有兴趣可以去app store下载)上面这两种情形出现时,一般要写比较多而且不那么优雅的定位计算代码,而且升级比较麻烦,苹果给出解决方案是Autolayout来改善frame计算工作过繁重的问题;Autolayout原理【图片来自developer.apple.com】iOS的视图是用tree来组织的,每个视图都有其父视图,根节点为Window对象。这样就可以把相对关系划分在一定范围内,同时使用父子、兄弟的关系来组织视图。使用AutolayoutAutolayout的使用是比较方便的,主要是生成NSLayoutConstraint对象,然后把constraint加到父视图就可以了。DEMO当设备进行翻转时,方块的位置和大小随之发生了变化,而这种变化,如果使用frame来进行计算的话,相对比较麻烦;而使用autolayout,代码要简单一些:1234567891011121314151617181920212223UIView * A = [[UIView alloc] init];UIView * B = [[UIView alloc] init];A.translatesAutoresizingMaskIntoConstraints = NO;B.translatesAutoresizingMaskIntoConstraints = NO;A.backgroundColor =[UIColor purpleColor];B.backgroundColor =[UIColor orangeColor];[self.view addSubview:A];[self.view addSubview:B];UIView * rootView = self.view;NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(A, B, rootView);NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[A(80)]-10-[B(80)]"options:0 metrics:nilviews:viewsDictionary];NSArray *horizontalAConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[A]-10-|"options:0 metrics:nilviews:viewsDictionary];NSArray *horizontalBConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[B]-10-|"options:0 metrics:nilviews:viewsDictionary];[self.view addConstraints:verticalConstraints];[self.view addConstraints:horizontalAConstraints];[self.view addConstraints:horizontalBConstraints];这个例子是“一步到位”的使用了visual format lanuage, 如 “V:|-50-[A(80)]-10-[B(80)]”表示:在垂直方向,A距父视图50,A宽80,B距A为10,B宽80, 与frame相比明显节省了代码。关于苹果的VFL(visual format lanuage),可以参考下表当然,如果只是单一属性的设定,也可以使用苹果的另一个api:[NSLayoutConstraint + constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:],参见apple官方文档 。Autolayout一些使用中的问题Autolayout比较灵活,同时也容易出现问题,归纳我遇到的:Ambiguous Layout,如果是使用了storyboard或者是xib绘制的对象,基本上不会出现这个问题,因为“模糊的定义”都被自动赋上了值,如果对象是自己生成的,则要注意是不是明确的指明了大小、位置(某些带sizeToFit的对象可以不指定大小);Unsatisfiable Constraints,这个一般是constraints的VFL没写对,检查再改改就好了;Unable to simultaneously satisfy constraints. 这个应该可以有多种原因导致,我遇到的情形是由于对象的translatesAutoresizingMaskIntoConstraints属性没有被设置成NO ;Dec 3rd, 2012Comments吐槽不断心中的猛虎–记Life of PI传说人生是一个不断自问“什么是人生”的过程,在不同的年龄、经历、环境、甚至因为遇到不同的人或者天气,会有完全不同的答案。于是,有人说关于人生的讨论都是屁话。就不断变老的自己而言,少年时曾在书中苦苦寻找必须不断学习和认知这个世界是否必要的终极答案,也悲剧的发现,有些事情,你一旦知
© 2010 - 2020 网站综合信息查询 同IP网站查询 相关类似网站查询 网站备案查询网站地图 最新查询 最近更新 优秀网站 热门网站 全部网站 同IP查询 备案查询
2024-04-24 20:53, Process in 0.0072 second.