Storyboard一直是Apple推崇的构建UI方式,相比纯代码更加高效,免去了冗长的约束,实际上Storyboard也可以很优雅,配合无线调试更是不要太方便。

  • 一个项目中,Storyboard不该是孤立存在的,每个模块独立Storyboard,每个页面都有独立的Storyboard,每个Storyboard只应该有一个主_VC_和同页的子_VC_,主_VC_不应存在2个以上。(绝大多数情况下,一个Storyboard上只应该有一个_VC_)。
  • 页面间的Segue连线应该使用Storyboard Reference SceneUITabBarController的子页因为复杂度应该当成主_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~