文中示例的项目地址:github
主要记录一些与StoryBoard相关的东西.目录如下:
- StackView
- StoryBoard Reference
- Scene Dock
- custom segue
- unwind segue
- something special
1.stackView
自动对其内部的视图作约束,当内部某视图hidden == true时,自动将其隐藏,其它视图约束依次修改。
使用场合:
A:显示一组相似视图:比如一横排按钮等;
B:显示一组布局大致相同视图;
C:运行时动态插入或删除视图,并保证优美的约束.
(使用场合的demo在文章开头的地址中)
说明:
1.插入一个UIView,系统会自动对其布局,也可以手动设置约束;
2.若视图已存在,可以通过hidden属性使其更新视图布局.
3.如果出现约束警告,且无法通过update constraints删除,可以尝试在警告视图中放入一个子视图再移除,或者更新下stackview的Distribution
4.如果动态更新stackView的视图,控制台会打印大量的过渡约束警告:将轴向固定约束的优先级改为750即可
一个简单练习:stackView_camera
2.StoryBoard Reference
在storyBoard中添加对另外一个storyBoard中的引用,从而两者实现交互。
解决问题:团队合作造成的IB冲突;庞大的IB管理困难;多个IB文件无法拖线,等.
使用场合:
1.拆分StoryBoard
Editor -> Refactor to StoryBoard
2:多个StoryBoard互相拖线
StoryBoard拖放一个StoryBoard Reference控件;
设置其StoryBoard名称(对应StoryBoard文件名mmm)和Reference ID(对象具体的控制器的ID:newID),则此控件代表了mmm.StoryBoard文件下的newID控制器
详情见项目地址....
3.Scene Dock
使用场合:
1.tableHeaderView
2.tableView cell 选中状态
3.特定情况下才显示的view
使用方式:
1.拖任意一个属于UIView子类的视图到控制器的Dock栏;
2.布局该视图....(可以使用Auto Layout);
3.将该视图拖到控制器中 Outlet
4.在需要显示的地方addSubView 或者 =(注意设置frame或AutoLayout)
注意:
同一个scene dock只能同时出现一份;
4.custom segue
类似于自定义专场动画。
1.自定义一个类,继承自UIStoryboardSegue;
2.重写其perform方法,设置其目标控制器的转场代理为自身 UIViewControllerTransitioningDelegate;
3.实现转场协议的代理方法:返回自定义的专场动画类实例;
4.实现一个转场动画类(第三步需要返回的类的实例),遵守动画转场协议
UIViewControllerAnimatedTransitioning
.动画持续时间
.动画的出现形式
获取fromVC fromView toVC toView;
根据实际情况自己手动写UIView动画;
需要transitionContext.containerView()?.addSubview
结束后必须调用transitionContext.completeTransition(true)
说明:
1.SJCustomSegue: UIStoryboardSegue
自定义的segue,用于转场
2.UIViewControllerTransitioningDelegate
转场目标控制器的动画器由该代理设置
3.UIViewControllerAnimatedTransitioning
动画控制器的协议,必须实现其两个方法,才能算一个动画
5.unwind segue
使用场景:
实现栈顶控制器回退到任意控制器.
使用方式:
1.在需要被跳转的控制器中实现 anyName(para:UIStoryBoardSegue) ->Void{}方法
需要添加@IBAction前缀;空方法即可,不需要任何代码实现
2.拖拽跳转触发按钮到其自身控制器dock栏的exit键;
3.在弹出的菜单中,选中希望跳转的控制器中实现的第一步的方法,即可
关于知识点,暂时介绍到这里,下面分享一些StoryBoard中的小技巧,随时补充中。。。
6.something special
总结的一些小技巧。
1.在storyBoard中创建tableView的tableHeaderView
A.拖拽任意一个视图到tableView最上方即可。
缺点:其子视图不能在自定义类中拖线,但可以直接拖到控制器
B.scene dock,好用不说了
2.在storyBoard中创建tableView的HeaderView
A.纯代码,xib不说了
B.scene dock 不说了
c.tableViewCell.contentView 棒极了
3.如何让section悬停,或者不悬停
设置tableview的style:plain or group
4.某个较深的界面需要多次调试
设置项目的Main Interface为当前控制器,必要时构造一些假数据
5.过渡约束(控制台打印一堆信息)
设置约束的优先级,简直一抓一个准。
6.在属性面板增加属性(比如圆角,borderColor,borderWidth等)
@IBInspectable 属性前加上改关键词,不解释
待续。。。。