iOS 约束 自动布局 UI

iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束

使用Storybord或Xib 的 AutoLayout入门晋阶 - WhoJun

iOS界面布局之三——纯代码的autoLayout及布局动画

不明原因的约束报错的两种处理方式

 

iOS9下代码创建约束

 Autolayout使用小结(一)

AutoLayoutMultiplier 源码

Size-Classes-Demo 源码

IOS页面自动布局 之 NSLayoutConstraint基础篇

ios autolayout中NSLayoutAttributeLeft(Right)与NSLayoutAttributeLeading(Trailing)区别

NSLayoutAttributeLeft 和 NSLayoutAttributeRight 代表从左右进行布局
NSLayoutAttributeLeading和 NSLayoutAttributeTrailing 代表从前后进行布局

在天朝 NSLayoutAttributeLeft 和 NSLayoutAttributeLeading 是一个效果的,布局习惯从左到右
但在有些国家地区,NSLayoutAttributeRight和NSLayoutAttributeLeading 是一个效果,布局习惯从右往左.使用推荐:NSLayoutAttributeLeading和 NSLayoutAttributeTrailing(比较常用)

如何设计一个自动布局库:以SDAutoLayout为例

 动画篇-layout动画的更多使用

iOS 8 AutoLayout与Size Class自悟 胡明涛 good

 

动画篇-layout动画初体验

动画篇-Transform和KeyFrame动画

iOS自动布局进阶用法

 Autolayout约束动画化(卖什么萌!)

详细对比IB开发与纯手码开发的优劣。 董铂然

ib storybord好在哪里? 1 项目结构清晰 2代码少就是bug少  3 大部分功能可以直接在图形化界面修改,更加面向对象 4 后期维护方便  5 开发模式自由

Storyboard的爱与恨

多Storyboard协作

解 决如上问题的方法就是,尽量将项目的界面分割在多个Storyboard文件中。一个最佳实践是,按照项目功能模块来区分故事板,例如 Login.Storyboard,Chat.Storyboard,Person.Storyboard等。尽量把每个Storyboard的 Scene数量控制在20个以内。

同时,Scene间的转场我们依然可以采用Segue,并且使用起来和单个Storyboard无异。这要多亏Apple在iOS 9新推出的UIStoryboard Reference

代码可视化

还有什么能比代码可视化更加炫酷的呢?作为前端工程师,最享受的时候,就是枯燥的代码和算法变成了优美的动画。但这一切都只在按下command+R之后。

现在,通过Storyboard,我们也可以在编译时实时预览我们的代码所产生的效果。

 

Storyboard的弊端

 

Storyboard也并非十全十美的。它依然有许多的问题亟待解决,有些致命的问题,更是成为导致许多开发者放弃Storyboard的原因。在iOS9普及率已经达到77%的今天,Storyboard仍然有很多问题需要完善。

 

难以维护

 

Storyboard 在某些角度上,是难以维护的。我所遇到过的实际情况是,公司一个项目的2.0版本,设计师希望替换原有字体。然而原来项目的每一个Label都是采用 Storyboard来定义字体的,因此替换新字体需要在Storyboard中更改每一个Label。

 

幸亏我们知道Storyboard的源文件是XML,最终写了一个读取-解析-替换脚本来搞定这件事。

 

性能瓶颈

 

当 项目达到一定的规模,即使是高性能的MacBook Pro,在打开Storyboard是也会有3-5秒的读取时间。无论是只有几个Scene的小东西,还是几十个Scene的庞然大物,都无法避免。 Scene越多的文件,打开速度越慢(从另一个方面说明了分割大故事板的重要性)。

 

让人沮丧的是,这个造成卡顿的项目规模并不是太难达到。

 

我猜想是由于每一次打开都需要进行I/O操作造成的,Apple对这一块的缓存优化没有做到位。可能是由于Storyboard占用了太多内存,难以在内存中进行缓存。Whatever,这个问题总是让人困扰的。

 

然而需要指出的是,采用Storyboard开发或采用纯代码开发的App,在真机的运行效率上,并没有太大的区别。

 

错误定位困难

 

Storyboard的初学者应该对此深有体会。排除BAD_EXCUSE错误不说,单单是有提示的错误,就足以让人在代码和Storyboard之间来回摸索,却无法找到解决方案。

 

一个典型的例子是,在代码中删除了IBOUTLET属性或者IBAction方法,但是却忘了在Storyboard中删除对应的连接,运行后crash。然而控制台只会输出一些模糊其词的错误描述。

 

 

 

1
2
3
*** Terminating app due to uncaught exception 'NSUnknownKeyException'
reason: '[ setValue:forUndefinedKey:]:  
this class is not key value coding-compliant for the key drawButton.'

 

有经验的开发者可以从drawButton这个关键字中找到突破口,但大部分刚接触Storyboard的开发者,会被困在其中。

 

最后

 

综 合其利弊,毅然选择了站在Storyboard这边。一方面是其提供的便利,另一方面是Apple对Storyboard的大力支持。这一点宏观上看,可 以在以往对Storyboard的改进和增强上看出,微观上看,几乎所有iOS 8之后的simple code都或多或少采用了Storyboard作为界面开发工具。有理由相信,Storyboard的未来是光明的。

 

愿大家在Storyboard的路(keng)上,越走越远。

 

 

 iOS 9: UIStackView入门

 Stack View会被当成Container View。所以它是一个不会被渲染的UIView子类。它不像其他UIView子类一样,会被渲染到屏幕上。这也意味着设置其backgroundColor属性或重载drawRect:方法都不会产生任何效果。

Getting Started with Auto Layout in Xcode 5  英文教程

initWithNibName与一般init的区别

1.initWithNibName要加载的xib的类为我们定义的视图控制器类 

  loadNibNamed要加载的xib的类为NSOjbect

(比如:甲,乙都买了一个iPhone,但是,甲的是自己的钱,而乙用的是某某的钱)

2.加载方式不同

 initWithNibName方法:是延迟加载,这个View上的控件是 nil 的,只有到 需要显示时,才会不是 nil

loadNibNamed方法:即时加载,用该方法加载的xib对象中的各个元素都已经存在。

 

 

Autolayout小结(二)

 

AutoLayout使用代码写约束 good

 

AutoLayout 实现固定宽度动态高度的 ScrollView

 你的下拉刷新是否“抖”了一下

2.1 约束类型

布局约束(NSLayoutConstraint类,公有)

内容大小约束(NSContentSizeLayoutConstraint类,私有)

自动尺寸调整约束(NSAutoresizingMaskLayoutConstrain类,私有)

布局支持约束(_UILayoutSupportConstraint类,私有)

原型约束(NSIBPrototypingLayoutConstraint类,私有)

 

iOS Auto Layout开发秘籍

 

 

利用xib(storyboard)添加约束(兼容性)【原创】 good

 

 Android史上最简单的引导页导航点实现方式【原创】

iOS绘制虚线方法【原创】

 

posted @ 2015-10-19 11:30  米粥米  阅读(582)  评论(0编辑  收藏  举报