1
typcn 2014-11-29 01:30:03 +08:00
我受不了,直接Disable Size Class
|
2
yellowV2ex 2014-11-29 02:01:29 +08:00
scrollView 的话,如果代码改了这个 scrollView 的 内容大小和contentSize,每当我滚动的时候,里面的东西就会自动复位,这个问题让我好生纠结。
|
3
WildCat 2014-11-29 07:00:07 +08:00 via iPhone
用习惯了你就根本停不下来…
推荐个入门文章 http://www.raywenderlich.com/83276/beginning-adaptive-layout-tutorial 其实这块的内容挺多, iOS 8 by Tutorials 这一块讲了一个章节 |
4
fkue0487 2014-11-29 09:14:47 +08:00
A = B * m + C,AutoLayout就是这么任性.
|
5
jox OP @WildCat thanks man.
昨晚睡觉前我打开了一坨的网页,其中一个就是那个,当时实在太困了就把电脑扣上了,打算今天好好研究一下 http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html 这个是objc.io的资料,里面有讲到layout process,虽然还没看,但是感觉也不错,如果有人对auto layout感兴趣可以看看。 auto layout能够减少大量的定位和计算尺寸的代码,以前如果打算对一个view的subview做flow式的排版,得反复计算frame,每个subview至少都要五六行代码,使用auto layout的话只需要修改subview的内容就行了,不用考虑layout,如果能整明白的话确实会让开发简单不少,希望我能整明白。。。 |
6
shiweifu 2014-11-29 09:48:49 +08:00
|
7
krafttuc 2014-11-29 11:41:33 +08:00 via iPhone
Auto Layout 确实比较啰嗦。可以尝试一下第三方 wrapper。
PS: 写动画时,蛋疼无比的说。 |
8
hrx00747 2014-12-02 23:12:12 +08:00
用frame来定位一个view是绝对位置来定位
而auto layout来定位一个view是通过相对位置来定位,在iphone尺寸越来越多的情况下相对位置定位更灵活一些。 使用autolayout有两种方式: 1. IB中定义约束条件 2. 代码中定义约束条件 推荐尽可能在IB中定义约束条件,如果必须在代码中定义的话,推荐使用这个项目 https://github.com/Masonry/Masonry |
9
jox OP @hrx00747 其实还有第三种方式,可以在IB中定义约束,然后IBOutlet这些约束,然后在代码中根据情况修改这些约束的值,在设计界面的时候不能确定动态加载的对象的定位,比如同一个view,包含控件ABCD,A和D在所有的场景都会出现,B和C各自有各自的场景,比如table cell,因为cell需要被重用,有些cell需要显示B,有些需要显示C,D的定位依赖于B或者C的定位,这时候只需要设定D与A之间的关系,通过判断当前显示的是B和C来调整D与A之间约束的constant,不显示的就隐藏,这样就免去了在代码中创建对象和约束对象的开销,效率上和代码上都简化了。
|
11
jox OP @hrx00747 就只有一个控件的区别,两个prototype cell的话我得把其他的控件都弄成一样的,同样的约束得加两遍,没意思。其实还有两种用法,一种是把auto layout当frame用,加上x,y,width,height约束,然后IBOutlet,然后修改constant,这样就跟原来使用frame一样了,只要一修改某个约束,auto layout就会自动再生成新的frame。还有一种是frame和Auto Layout混着用,手动创建的view是可以配置frame的,在开启Auto Layout的情况下之所以修改frame不好使是因为修改frame之后,Auto Layout在之后的Layout环节会根据约束生成新的frame,导致之前设定的frame被覆盖了。手动创建的view如果不加任何约束的话,translatesAutoresizingMaskIntoConstraints默认是开启的,所以可以在Auto Layout工作之前设置frame。然后系统会根据frame自动生成约束,然后就跟在IB里创建的view一样了,都一起走update constraints --> layout -- > draw 这么个流程,在IB里创建的对象IB会自动关掉translatesAutoresizingMaskIntoConstraints,因为在IB里设置的约束已经足够定位了,这个属性就多余了。另外如果把某个view的所有在IB里创建的约束都去掉,并且也不开启translatesAutoresizingMaskIntoConstraints的话不知道会怎么样,没尝试过,不过应该会导致程序崩溃
|