怎样在 AutoLayout 中使用 UIScrollView (多个ContentView)

时间:2022-09-16 14:30:12

http://codehappily.wordpress.com/2013/11/14/ios-how-to-use-uiscrollview-with-autolayout-pure-autolayout-approach-multiple-smaller-views/

本帖演示怎样在AutoLayout 下使用 UIScrollView 。在ScrollView  中还会包括多个子视图。在本例中。我用 3 个不同背景色的view 作为 ScrollView 的 ContentView。

代码下载: https://github.com/djsison/iOS-ScrollView-AutoLayout-MultipleContents

假设你想了解仅仅有一个 view 的 ScrollView,能够看
iOS: How to use UIScrollView with Auto Layout (PureAuto Layout) – Single Content View

本文将使用到纯AutoLayout 方式进行布局,请參考以下的连接:

https://developer.apple.com/library/ios/technotes/tn2154/_index.html

首先,我在故事板中定义例如以下视图层次:

  • View (UIViewController 的 view)

·      Scroll View (UIScrollView)– 暗灰色

·      Container View (UIView) – 轻灰色

·      Content1 (UIView) – 红色

·      Content2 (UIView) – 绿色

·      Content3 (UIView) – 蓝色

终于在故事板中显示为例如以下布局:

怎样在 AutoLayout 中使用 UIScrollView (多个ContentView)

在设置布局规则之前,注意以下几点:

  • Scroll view 没有固定的高度和宽度。
  • Scroll View 的 宽度和高度由其内容所决定(即 Scroll View 的 contentSize 所决定) 。
  • 内容的大小必须不依赖于 Scroll View 的尺寸。

    比如。Content1。Content2。Content3 不能包括不论什么与 Container View 相关的 top。bottom,left 和 right 的布局约束。仅仅能包括固定宽度和高度的约束(每一个约束至少在得在当中之中的一个上定义)。假设不论什么一个 content view 都不包括这些约束,则它们的大小将依赖于 Scroll View(由于它们被绑定到 Scroll View 的边距),但 Scroll View 又依赖于内容的尺寸。这就导致矛盾冲突。

  • ScrollView 必须至少有一个内容绑定它的四条边,比如 top,left,right,bottom。这样 ScrollView 才干知道它的内容的边界在哪里,即 Scroll View 的 ContentSize。

如今,让我们開始布局。

怎样在 AutoLayout 中使用 UIScrollView (多个ContentView)

  • Scroll View (UIScrollView):  相对于 superview 。 leading, trailing, top, bottom 四个方向都为 20。
    你也能够将 20 改为 0,这样将占领 View Controller 的整个 view 大小。
  • Container View (UIView): 相对于 Scroll View,leading, trailing, top, bottom 四个间距都取值 0。
    一般来说,这是固定不变的,除非你想做一个在边上留白的效果。
    在截图里, leading, trailing, top, 和 bottom 间距都设为 0。Container View 的尺寸将有 3 个 Content views 的大小决定。从而再影响 ScrollView 的大小(ScrollView 的实际大小将在执行时计算,在故事板上设置它的大小没有不论什么作用)。
  • Content1: 固定宽为 100,高 240,leading 和 trailing 边距 20。top 边距 8,bottom 边距 8( Content1 和 Content2 之间的间距)。
    注意 leading 和 trailing 约束,以及 width 约束。假设 content1 是位于另外一个固定大小的 view 中。则 Xcode 会提示有约束冲突。但 content1 除 bottom 外。 top。left。right 边距都是相对于 ScrollView 的。
  • Content2: leading 和 trailing 为 20 , bottom 为 8 (Content2 和 Content3 之间的垂直间距), 高度 100。
    我们没有加入宽度限制。这样,仅仅有 content1 能影响 ScrollView 的 contentSize。
  • Content3: leading 和 trailing 为 20。button 20(content3 和 superView 即 ContainerView 之间的垂直间距)。宽度固定为 100。如今,我们也有一个 view 跟 ScrollView 的底边是相关的了。

用  iPhone 3.5 inch 模拟器执行程序。观察执行结果。

怎么不能滚动?
别急,这是由于 contentView 对于ScrollView 来说还不够大的缘故。

我们能够改动不论什么一个 contentView 的 Size。这里,我仅仅改动了 Content1 的宽度:

-(void)viewDidLoad {

[super viewDidLoad];

self.content1WidthConstraint.constant = 500;

}

执行程序。水平滚动栏出现。注意,别忘了为对应的约束创建 IBOulet。

然后,尝试改动content2 的高度。

-(void)viewDidLoad {

[super viewDidLoad];

self.content2HeightConstraint.constant = 200;

}

执行程序,垂直滚动栏也出现了。

怎样在 AutoLayout 中使用 UIScrollView (多个ContentView)的更多相关文章

  1. AutoLayout中使用UIScrollView

    UIScrollView 在 Auto Layout 是一个很特殊的 view,对于 UIScrollView 的 subview 来说,它的 leading/trailing/top/bottom ...

  2. xcode中使用xib添加autolayout中constrain to margins的不同

    在使用xcode7 在storyboard中添加autolayout中发现 如果添加在view 直接添加到viewcontroller的view 上 constrain to margins    只 ...

  3. iOS开发之AutoLayout中的Content Hugging Priority和 Content Compression Resistance Priority解析

    本篇博客的内容也不算太复杂,算是AutoLayout的一些高级的用法.本篇博客我们主要通过一些示例来看一下AutoLayout中的Content Hugging Priority以及Content C ...

  4. iOS Core Animation具体解释(四)AutoLayout中的动画

    原创blog.转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK具体解释专栏 http://blog.csdn.net/column/details/huang ...

  5. iOS-AutoLayout中动画使用的细节 和 iOS layout机制

    在Main.storyboard拖入一个UIView,随便设置一个背景色, 使用autolayout  为紫色的view添加约束 :(0,0,100,100) , 为该view添加动画代码如下: #i ...

  6. 【转】iOS学习之Storyboard中的UIScrollView使用自动布局

    在使用storyboard和xib时,我们经常要用到ScrollView,还有自动布局AutoLayout,但是ScrollView和AutoLayout 结合使用,相对来说有点复杂.根据实践,我说一 ...

  7. Storyboard中使用UIscrollView添加约束的开发总结

    第一次在项目中用storyboard做界面,一般的界面直接添加约束非常爽快 然后有个界面有scrollview,添加了约束还总是出错 刚开始使用了 wCompact,hRegular,滑动出现问题,有 ...

  8. IOS中的UIScrollView

    要引用UIScrollView 首先要遵循UIScrollViewDelegate协议 然后重写 //1.拖拽方法 -(void)scrollViewDidScroll:(UIScrollView * ...

  9. 转:AutoLayout中的Content Hugging 和 Content Compression Resistance

    OS6中引入了AutoLayout,极大的方便了UI元素的布局,现在已经过去一年了,并且大部分设备的系统也已经升级到了iOS6,是时候要使用此项技术了. 在AutoLayout的学习中有两个概念官方文 ...

随机推荐

  1. Java位运算符

    & 两个二进制数的相同位比较,都为1,结果为1,否则结果为0. | 两个二进制数的相同位比较,只要有一个为1,结果就为1,否则为0. ~ 对一个二进制数的每一位取反,原值为1,取反为0,原值为 ...

  2. android 滚动视图(ScrollView)

    为了可以让内嵌布局管理器之中加入多个显示的组件,而且又保证程序不这么冗余,所以可以通过 Activity程序进行控制,向内嵌布局管理器中添加多个组件. ScrollView提供一个显示的容器,可以包含 ...

  3. openssl对数组加密解密的完整实现代码

    本例是用C实现的对一个数组进行加密,加密到第二个数组,然后解密到另一个数组的完整实现代码. #include <stdio.h> #include <string.h> #in ...

  4. 《C&plus;&plus;反汇编与逆向分析技术揭秘》——观察各种表达式的求值过程

    ---恢复内容开始--- 加法: 示例: 常量相加,则在编译期间就计算出两个常量相加后的结果,直接将这个结果参与运算,减少了运行期的计算.当有变量参与运算时,会先取出内存中的数据,放入通用寄存器中,再 ...

  5. vue指令v-else-if示例解析

    表示 v-if 的 "else if 块".可以链式调用. <div id="app"> <p v-if="isRender&quo ...

  6. kibana——es的批量操作

    一·_mget: 1.创建的索引如下: 2.批量查询: #查询两个 GET _mget { "docs":[ { "_index":"testdb&q ...

  7. 搭建activemq服务

    文章链接:https://www.cnblogs.com/xiaxinggege/p/5900319.html ubuntu下安装JDK并搭建activeMQ   1.安装JDK,网上有人说activ ...

  8. 2018 ICPC青岛网络赛 B&period; Red Black Tree&lpar;倍增lca好题&rpar;

    BaoBao has just found a rooted tree with n vertices and (n-1) weighted edges in his backyard. Among ...

  9. iOS开发CAAnimation详解

    Core Animation,即为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能.Core Anima ...

  10. hdu5306 Gorgeous Sequence

    hdu5306 Gorgeous Sequence 题目大意 ​ 给你一个序列,维护区间和,区间chkmin和区间最大值 数据范围 数据组数T,序列长度n,操作次数m $T = 100,\sum n ...