Storyboard一直是Apple推崇的构建UI方式,相比纯代码更加高效,免去了冗长的约束,实际上Storyboard也可以很优雅,配合无线调试更是不要太方便。
- 一个项目中,Storyboard不该是孤立存在的,每个模块独立Storyboard,每个页面都有独立的Storyboard,每个Storyboard只应该有一个主_VC_和同页的子_VC_,主_VC_不应存在2个以上。(绝大多数情况下,一个Storyboard上只应该有一个_VC_)。
- 页面间的Segue连线应该使用Storyboard Reference Scene,UITabBarController的子页因为复杂度应该当成主_VC_处置。
- 视图的初始样式应尽量在Storyboard上属性面板中设置,非极特殊情况,布局也应在Storyboard上使用各种约束配合完成。这样有利于视图样式和视图代码分离,有利于视图代码重用性和兼容性提高。
- 对于逻辑复杂的_VC_,每个Storyboard只应该有一个主VC和同页的子VC,主VC不应存在2个以上,应添加Object对象或者Embed Segue ChildViewController,并绑定相应的类来分离逻辑代码。
- 对于圆角,背景色,阴影等CALayer的样式,应该使用扩展或子类化实例的形式,使用@IBInspectable_IBInspectable属性关键字,在_Storyboard/属性面板中设定初始样式。
- 对于自定义视图,应使用@IBDesignable_IB_DESIGNABLE关键字保障在_Storyboard&Xib/上所见即所得。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #import <UIKit/UIKit.h> IB_DESIGNABLE @interface UIView (MOT) @property(nonatomic,assign) IBInspectable CGFloat cornerRadius; @property(nonatomic,assign) IBInspectable CGFloat borderWidth; @property(nonatomic,assign) IBInspectable UIColor *borderColor; @end
// .m #import "UIView+MGO.h" @implementation UIView (MOT) -(void)setCornerRadius:(CGFloat)cornerRadius{ self.layer.masksToBounds = YES; self.layer.cornerRadius = cornerRadius; } -(void)setBorderColor:(UIColor *)borderColor{ self.layer.borderColor = borderColor.CGColor; } -(void)setBorderWidth:(CGFloat)borderWidth{ self.layer.borderWidth = borderWidth; } -(CGFloat)cornerRadius{ return self.layer.cornerRadius; } -(CGFloat)borderWidth{ return self.layer.borderWidth; } -(UIColor *)borderColor{ return [UIColor colorWithCGColor:self.layer.borderColor]; }
|
via:StoryBoard 多人协作技巧
thanks for your reading~