UIScrollView使用autolayout技术。

转自:http://dadage456.blog.163.com/blog/static/30310744201491141752716

使用autolayout可以很方便的对ui进行定位。。但是有个特别的存在,就是UIScrollView。让UIScrollView实现autolayout比较麻烦。。记录下来以便后期查看。。

1、创建一个空白的UIViewController

2、将UIScrollView添加到UIView控件中,并设置UIScrollView针对父视图UIView的constraints(Leading/trailling/top/bottom = 0)

3、最主要的来了,添加UIView控件到UIScrollView中。。

(1)并改名为ContentView….(UIScrollView主要是靠子视图来实现autolayout的高度和宽度的计算)
(2)然后设置ContentView的针对父视图UIScrollView的 constraints
  1. Leading/trailling/top= 0
  2. bottom = 1
  3. equal height / equal width (ContentView的高度和宽度 与 UIScrollView相等)
  4. 设置equal height的优先级
    priority 小于
    刚才设置的bottom的优先级(该bottom的是ContentView针对UIScrollView的constraints),这里设置priority=999.

这里需要注意
第一:为什么 bottom =1 而不是 bottom = 0。
在实际开发中,如果为0,并且ContentView中的内容高度不超过屏幕的高度时,uiscrollview不能下上拉动。
第二:要实现ContentView 的高度自适应为uiscrollview的contentSize的高度,需要ContentView中的子视图有明确的top与bottom,用来让autolayout计算出ContentView的实际高度.
第三:为什么要设置equal height 的优先级。。。我们来写个公式更容易理解
因为

scrollview.height = uiview.height

又因为

ContentView.height = scrollview.height + 1

所以
ContentView.height != scrollView.height 也就是不能实现equal height 这个constraints。。会报错。
只要调整一下优先级就可以解决这个问题,出现冲突,优先适应ContentView的高度….
现在你可以在ContentView上添加你想添加的控件,但记住如果你要添加的控件已经超出了屏幕的高度,你需要给ContentView里面的子控件加上bottom 和 top(不超过你也可以添加),这样autolayout才能计算出ContentView的高度,并将这个高度赋给UIScrollView的ContentSize,实现自适应高度。。。

后记:ContentView中如果使用UILabel,要给uilabel明确的height constraint,这样auto layout才能计算出高度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值