iOS开发——使用基于Autolayout的ScrollView

问题描述:

在使用Autolayout布局方式对ScrollView进行布局时,如果你想做一个可以垂直方向滚动的九宫格类似这样:

 

拿一行来说,一定不要想当然的尝试去给一行图标进行均匀排列的操作(指定padding,图片尺寸自适应),你的针对ScrollView右边和下边的约束是无效的。约束了结果也是没用的,然后图片的内在尺寸约束会占据主导,把ScrollView水平方向也顶出屏幕,使得ScrollView水平方向变得也可以滚动。

 

解决方法:

解决办法是不能在ScrollView中使用Autolayout进行图片尺寸自适应的操作,在指定padding的前提下,我们是可以得到屏幕宽度的,进而计算出n列情况下每张图片的尺寸,进而直接用约束制定每张图片的尺寸,图片就会排列正常。

 

 

 

 

参考来源:

具体而言就是要确定content view和scroll view的top, bottom, leading和trailing contstraints,这个地方可能比较具有迷惑性,原因是苹果对于这四个约束的使用在scroll view中做了变化:它不再是确定content view尺寸的依据,而是帮助scroll view中content view四周的边界(or你可以理解为留白),进而确定scroll view的contentSize属性。

from: Xcode6中如何对scrollview进行自动布局(autolayout)

 

我们知道,UIScrollView 有一个 contentSize 属性,其定义了 ScrollView 可滚动内容的大小。在以前用纯代码写的时候,我们会直接对这个属性赋值,定义其大小。但在 Autolayout 下,UIScrollView 的 contentSize 是由其内容的约束来定义的。因此,我们在 ScrollView 里面设置的约束,不仅起到布局内容的作用,同时也起到了定义 ScrollView 可滚动范围的作用。

from: ScrollView 与 Autolayout

时间: 2024-08-11 10:21:21

iOS开发——使用基于Autolayout的ScrollView的相关文章

iOS开发项目实战——Swift实现ScrollView滚动条功能

手机作为一个小屏设备,需要显示的信息往往无法在一个屏幕上显示,此时就需要使用到滚动条,当然除了像TableView这样可以自带滚动功能的.如果一个界面上View较多,那就必须要使用到ScrollView了.现在我们将会使用Swift在iOS上实现滚动效果.具体实现如下: (1)创建一个新的iOS项目,语言选择Swift,并在Main.storyboard中拖入一个ScrollView控件.然后在ScrollView中拖入几张照片,等下可以使用滚动功能查看照片,界面如下: . (2)把Scroll

iOS开发--XLVideoPlayer——基于AVFoundation自定义的视频播放器

本文聊点关于最近写的这个自定义播放器.支持UITableViewCell上小屏.全屏播放,手动及屏幕旋转切换,包括右下角的小窗悬停播放,不依赖于视图控制器和第三方,尽量的让使用起来更简单,具体代码详情请戳Github,先看看效果如何! 这是基于AVFoundation下自定义的一个播放器,先简单介绍几个用到的类. 介绍: AVPlayer:可以理解为播放器对象,灵活性好,可以高度化的自定义UI,但它本身不能显示视频,显示需要另一个类AVPlayerLayer来显示,继承于CALayer,下面是摘

iOS开发-UI篇-AutoLayout

1.概述:随着iOS设备的更新迭代,屏幕适配问题也变得愈发重要,应运而生了Autolayout.在Xcode4.1和OS X10.7之后才起效. 2.简介:Apple提供了2种方式布局Autolayout,用xib来布局;另一种利用代码进行布局,在Apple的sdk中提供了2个类库:NSLayoutManager和NSLayoutConstraint.NSLayoutManager类主要是配合NSTextStorage,NSTextContainer实现NSCoding协议用来布局text视图,

iOS开发页面滑动返回跟scrollView左右划冲突问题

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { // 首先判断otherGestureRecognizer是不是系统pop手势 if ([otherGestureRecognizer.view isKindOfClas

Xcode6 IOS开发UITableView基于Storyboard的使用

1.点击项目里面的Storyboard文件,然后给当前的UIViewController控制器里面拖入TableView,如下图所示 2.然后选中tableView,选择属性里面的Prototype Cells,设置参数为1,然后设置Style为Group,就会出现一个Cell空间在TableView上,然后给里面拖入你想要的东西,我再这里加入拖入Label 3.给TableView设置代理 设置代理有两种方式, 1)连线:按住control连接tableView到当前的控制器ViewContr

iOS开发——UI篇&ScrollView详解

ScrollView详解 创建方式 1:StoryBoard/Xib 这里StoarBoard就不多说,直接拖就可以,说太多没意思,如果连这个都不会我只能先给你跪了! 2:代码: CGRect bounds = [ [ UIScreen mainScreen ] applicationFrame ] ; UIScrollView* scrollView = [ [UIScrollView alloc ] initWithFrame:bounds ]; 当你创建完滚动视图后,你可以将另一个视图的内

iOS开发基于MVC项目上重构举例

上一次我们讨论了iOS重构在MVC项目上的可行性,今天具体来讲基于MVC的项目重构步骤以及重构后的结构. 思考要解决的问题 回到项目重构的问题上来,我认为项目重构首先要想清楚的问题: 项目层级如何划分? 大的业务场景有哪些? 将UIViewController归类为View还是Controller? 谁来负责网络请求,Model还是Controller? 从Model中取得数据后Controller怎么把数据传递给View去展示?按照View层级逐级传递?是否需要使用ViewModel? Mod

iOS: How To Make AutoLayout Work On A ScrollView

iOS: How To Make AutoLayout Work On A ScrollView Posted on June 11th, 2014 Ok, I’ll admit. I’ve been seriously struggling with AutoLayout ever since it’s been introduced. I understand the concept, and I LOVE the idea of it, but when I actually do it,

ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)

ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:https://github.com/niexiaobo/ 实现功能 :播放视频 ,视频后台下载 (真机调试功能正常) 1.使用ZFPlayer播放视频(可以在线和本地播放,基于AVPlayer,调节音量和屏幕亮度) 2.使用 WHCNetWorkKit 实现下载,后台下载(多任务同时下载,单任务下载,