项目为了以后迭代将原有的sb项目改为纯代码。sb
对国际化的支持还不够好
1.拆掉xib ,xib一般耦合性最低,不会引起界面跳转上的崩溃。拆除xib,重写代码中 alloc init
的初始化方法,如有需要的参数,一次性传入,包括自定义界面的宽高,图片名称,弹框文字等。
2.引入masnory约束库,masnory写法需要适应一下,好在和autolayout没有什么不同,中间存在问题的地方是有些地方不能使用masnory约束
1.
tableview的headview 和footview不能使用masnory约束,但是headview里面的部分可以使用,原因是tableview.tableviewheadview = headview.系统会更新他的Frame,此时masnory会失效。
可以总结为需要将某个view赋给某个控件的一部分的地方,就不要使用masnory了。
2.
需要做动画的部分使用Frame来做,因为masonry的动画不好控制。
3.拆掉xib后开始拆分storyboard,storyboard的拆分,如果存在多个sb,应该从,sb中包含单个sb界面比较少的开始下手,因为依赖性不强。
4.处理cell的部分,-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
在这个方法里面初始化cell
5.处理多个sb中都用到的同一个界面,减少其他sb的拆分难度。一个sb存在多个界面的首先处理和其他界面关联比较少的界面。
6.处理静态cell的部分。静态cell纯代码是不能够使用的,将uitableviewcontroller 改成uiviewcontroller 并添加uitabbleview,注意到如果存在sectionhead和sectionfooter,需要将这两个部分处理颜色为clearcolor
- (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section
{
view.tintColor = [UIColor clearColor];
}
7.将sb中的跳转方法,performSelectorWithIdentity
部分全部转移到 (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
中,根据switch来判断跳转到不同行。
8.拆分containerView部分,container部分需要处理两步,第一步:将container的view删除,留下container指向的sb部分,重写指向sb的初始化,具体代码 为
_VC = [[UIViewController alloc] init];
//2.将目标控制器的视图赋值给容器视图(不能用addSubView,否则设置frame无效)
UIView *containerView = _VC.view;
//3.添加到当前视图
[self.view addSubview:containerView];
9.完成全部后,搜索关键字storyboard 以及performSelector 部分,完全没有视为成功,记得删除sb的时候,最好看下本地的文件是否真实删除成功了。记得把国际化的东西也清理掉。