storyboard、xib、autolayout杂谈
2016-04-14 本文已影响561人
帅只是表象
可视化的视图可以帮助我们有效、高效的开发应用。这篇文章就来分享一下几个注意事项。
storyboard
-
在storyboard中的tabbaritem的图片怎么改变大小呢? 这个问题我当时困扰了好几天,查了很久。都是说从
这改变,但我试了试,并不行,当你点击模拟器中的tabbaritem时,图片会变小,多次点击会在变小,直到消失。后来我就问了我一个喜欢用storyboard的同事,他说这个无法改变,要美工重新做小点的图片就行了。
-
一个项目可能要有数十个页面,不可能都放在一个storyboard中,这时有tabbarcontroller的storyboard怎么关联到其他的storyboard呢?
我们可以通过
来串起来。如这样:
点击StoryboardReference在这个地方可以为它选择相应的storyboard
- 一些小伙伴在使用storyboard时想使用静态的cell,确发现有时并不行,这是因为只有UITableViewController才可以,在UIViewController上添加UITableView是不行的。
- 拖线跳转页面会掉用这个方法
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
}
segue.destinationViewController
这个就是当前控制器通过segue要跳转的控制器,利用这个属性可以进行正向传值
xib
- 在使用xib的时候,有可能你会发现你的视图不能拖动改变大小了。你会发现它的边缘是这样的
而不是这样的
这时你可以修改此处为Freeform
- 注意建议你不要修改controller的view的大小,比如你把它变窄了看上去明显比屏幕窄,运行模拟器时发现依然是充满屏幕的,但是它的frame已经改变了,如果你在代码中用它的frame给别的控件定位的话就会不准,但如果你使用约束的话显示在屏幕上的效果依然正常。
- 在使用xib创建cell时,我们常常只会一个xib对应一个cell视图。其实可以一个xib中创建多个cell视图,通过
cell = [[[NSBundle mainBundle] loadNibNamed: owner: options:] objectAtIndex: ];
从中取出对应index的cell,这样一个UITableView或一个UITableViewController只创建一个cellxib的话,文件就会少一些,看起来就会更简洁。
可以根据indexPath设置不同的identifier。可以把创建Cell的过程放在Cell.m中,做成类方法,这样controller中的代码就会更少。
autolayout
- autolayout就是通过
参照
与约束
来确定一个控件的位置
和大小
。 - 要注意的是
- 要通过代码改变xib、storyboard中的控件约束的话,控件的
.translatesAutoresizingMaskIntoConstraints=NO;
- margin是边缘的意思,苹果建议我们的控件距离屏幕的边缘有一定的距离,而且不同尺寸的iphone的margin的值是不同的,如果你想让在不同尺寸上距离边缘的距离都相同的话,用代码改变就不要用带margin的参数,若用xib、storyboard添加约束,注意此处不要打勾
再此奉上他人写的代码改变约束的文章 - 我们不仅可以通过约束改变位置,也可以直接frame改变位置,这里请注意如果改变了frame的话,只是显示在屏幕上的位置改变了,而它的约束位置并没有改变,以它为参照添加约束的控件的位置也不会改变
注:相关内容我会继续更新。如果想找一些iOS方面的代码可以关注我的简书,我会持续更新,大家一起探讨探讨
在此谢谢大家阅读😊