如何在UIScrollView的xib上添加子控件并添加AutoLayout约束

引言

自从苹果推出了autoLayout之后,作为开发者,深深的体验到了他的便捷之处,再也不用为适配不同屏幕布局UI而烦恼,我们仅仅需要和类关联一个xib文件,想上面放置我们需要的控件xib,并打好其相对于父视图以及同级视图的约束关系,这样我们就做好了不同屏幕的适配。但是奇怪的是UIScrollView上添加子控件,和之前的一样的操作,报的错却很吓人,那是为什么呢?

原因分析

因为UIScrollView想要能滑动的前提是要知道他的ContentSize的大小,我们直接向上面添加约束,他不知道自己的ContentSize是多少,所以就报错了

解决方法

1. 拖一个UIView在UIScrollView上作为子控件的内容视图,之后所有的空间都放在这个内容视图上(类似于UITableviewCell的contentView)

2. 设置这个内容视图距离UIScrollView上下左右距离约束都是0,表示内容视图和UIScrollView的frame一样大

3. 固定UIView 的高度,这一步是虚假的操作,这样UIScrollView就以为的自己的contentSize.height = 内容视图.height

4. 设置UIView水平居中(表示垂直方向能滑动),这时候UIView就没有警告了

5. 向UIView上拖子控件,按正常情况设置约束(从上往下打约束)

6. 删除之前设置的高度约束,设置UIView 和其子视图布局最底部的控件的 bottom space to container

至此,UIScrollView上的约束就完成了~

时间: 2024-08-03 20:19:02

如何在UIScrollView的xib上添加子控件并添加AutoLayout约束的相关文章

xib或storyBoard中往scrollView添加子控件

如何在xib或者storyBoard中的scrollView加拖拽子控件,并且能让它可以正常滚动,那么下面就为大家简单演示: 运行环境为:Xcode 7.3 备注:图片较大,如果看不清看可以右键鼠标在新标签中打开图片就很清晰了 1.如图我们往storyBoard拖拽一个scrollView并设置为上下左右约束距离父控件为0 2.当我们往scrollView中添加子控件时候却发现报错了 因为scrollView比较特殊,需要设置contentSize,这个错误和平常我们遇到的错误不一样,因为在这两

IOS 读取xib里的子控件

interface ViewController () /**获取.plist数据*/ @property (nonatomic,strong) NSArray *aps; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //九宫格的总列数 int totalColumns=5; //1.1个格子的尺寸 CGFloat appW=50; CGFloat appH=60; //2.计算间隙

解决UIScrollView中添加子控件出现“UIScrollView Scrollable Content Size Ambiguity”的办法

来自StackOverflow的帖子,原文见这里. So I just sorted out in this way: Add in the UIScrollView a UIView (we can call that contentView); In this contentView, set top, bottom, left and right margins to 0 (of course from the scrollView which is the superView); Set

触摸点为scrollview上的子控件时,scrollview不能滚动(iOS8)

现象:在iOS8上,scrollview上面布局了多行多列的button,滑动scrollview,如果当触摸点是在按钮上,scrollview不能滚动. 例如: 解决方法:设置scrollview的panGestureRecognizer.delaysTouchesBegan为YES, scrollView.panGestureRecognizer.delaysTouchesBegan=YES; 关于这个问题,应该是和触摸事件的传递有关,继承自scrollview定tableview也会有这样

【iOS开发】添加子控件方式(懒加载,GCC)

1 // 2 // ViewController.m 3 // GCC 4 // 5 // Created by admin on 15/10/7. 6 // Copyright © 2015年 admin. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 13 @property (nonatomic, strong) UIButton* bt

UIScrollView子控件的布局

scorllView内部子控件添加约束的注意点: 1.子控件的尺寸不能通过UIScrollView来计算 *比如可以设置固定值 (width==100 height ==100) *比如可以相对于UIScrollView以外的其他控件来计算尺寸 2.UIScrollview的frame应该通过子控件以外的其他控件来计算 3.UIScrollView的contentSize通过子控件来计算 *根据子控件的尺寸以及子控件与UIScrollView之间的间距

子控件根据父控件行宽自动换行---LineWrapLayout实现

一些带搜索功能的app,在搜索栏下面一般会提供一些关键字供用户选择. 也可以根据用户输入的文字,在下一次使用的时候该文字出现在常用关键字里面,只要轻轻一点就可以搜索了,无需再次输入. 关键字可以动态添加,这就要考虑换行的问题了 废话不多说,先上效果图: 先定义2个自定义属性 <declare-styleable name="linewarplayout"> <attr name="magin" format="integer"

解决ListView中Item的子控件与Item点击事件冲突

经常会碰到在ListView中点击其中一个Item,会一并触发其子控件的点击事件,例如Item中的Button.ImageButton等,导致了点击Item中Button以外区域也会触发Button点击事件.在网上找了相关方法,这里记录下,亲测可行.. 1.在Item的xml文件根元素中添加属性:android:descendantFocusability="blocksDescendants" 2.在冲突的子控件中添加属性:android:focusable="false&

Visual Studio 2008 添加MScomm控件的方法

1.下载MSCOMM.zip,解压后包含4个文件:MSCOMM32.OCX, MSCOMM.SRG, MSCOMM32.DEP, MSCOMM32.OCA 2.将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹system32中,(C:\windows\system32): 如果是64位系统,将Mscomm32.ocx拷入到 C:\Windows\SysWOW64 3.用Windows下的注册工具regsvr32注册该OCX控件,点击“开始”->