zoukankan      html  css  js  c++  java
  • AutoLayout中使用UIScrollView

    UIScrollView 在 Auto Layout 是一个很特殊的 view,对于 UIScrollView 的 subview 来说,它的 leading/trailing/top/bottom space 是相对于 UIScrollView 的 contentSize 而不是 bounds 来确定的,所以当你尝试用 UIScrollView 和它 subview 的 leading/trailing/top/bottom 来互相决定大小的时候,就会出现「Has ambiguous scrollable content width/height」的 warning。正确的姿势是用 UIScrollView 外部的 view 或 UIScrollView 本身的 width/height 确定 subview 的尺寸,进而确定 contentSize。因为 UIScrollView 本身的 leading/trailing/top/bottom 变得不好用,所以我习惯的做法是在 UIScrollView 和它原来的 subviews 之间增加一个 content view,这样做的好处有:

    • 不会在 storyboard 里留下 error/warning

    • 为 subview 提供 leading/trailing/top/bottom,方便 subview 的布局

    • 通过调整 content view 的 size(可以是 constraint 的 IBOutlet)来调整 contentSize

    • 不需要 hard code 与屏幕尺寸相关的代码

    • 更好地支持 rotation

    UIScrollView添加约束要点:

    1.scrollView与它的superview的约束关系用来确定scrollView的frame

    2.scrollView中的『contentView』的约束关系用来确定scrollView的contentInsets

    3.contentView的宽度和高度用来确定scrollView的contentSize

    最常用示例,纵向多视图滑动

    原则1:UIScrollView的size依赖于subviews

    UIScrollView的size(即contentSize)则根据subviews所占据的size来计算。当然,如果contentSize的内容不足以布满整个UIScrollView时,滚动条将不会出现,UIScrollView也不会滚动。

    原则2:subviews的size不能依赖于UIScrollView

    很简单,因为原则1:UIScrollView的size依赖于subviews。如果subviews的size再依赖于UIScrollView,则布局引擎就混乱了。

    要解决这个问题,我们需要把subview的宽度明确,起码不能和靠不住的UIScrollView的size相关。(可以与scrollView的父视图先关)

    4、在代码中修改contentsize

    有时候contentsize可能是动态的,需要在代码中修改。通常是在ViewController的viewDidAppear方法中setContentsize。但是在我的项目中发现一个问题,iPhone6/iPhone5测试正常,在iOS6中设置无效,设置时打印contentsize是正常的稍后打印contentsize.height居然变为0了,最后将setContensize放在dispatch_async(dispatch_get_main_queue(), ^{ });中解决问题

    5. 怎么不能滚动?

    别急,这是因为 contentView 对于ScrollView 来说还不够大的缘故。如果像在ContentSize不够大的情况下也有滑动效果(其实是回弹效果),可以用一下属性

    BOOL bounces 控制控件遇到边框是否反弹
    BOOL alwaysBounceVertical 控制垂直方向遇到边框是否反弹
    BOOL alwaysBounceHorizontal 控制水平方向遇到边框是否反弹
  • 相关阅读:
    (1)、Bash的基本功能
    (3)、shell运算符与正则表达式
    中小规模集群搭建之backup服务(rsync守护进程)
    中小规模集群搭建(拓扑)
    asp.net 后台弹出JS提示框或执行JS方法
    MYSQL外键(Foreign Key)的使用
    直接双击页面元素进行修改的HTML代码
    [原创]Centos7 从零编译配置Memcached
    在XHTML中使用Media Player播放媒体文件
    JQuery插件右键菜单
  • 原文地址:https://www.cnblogs.com/guoxiaoqian/p/4593908.html
Copyright © 2011-2022 走看看