如何在 sdautolayout使用方法 中使用 UIScrollView

在有些人的世界里,时间是安静且长的,生命是无限延伸的,爱也是无穷无尽的。据说大脑的每个神经元都在以每秒钟1比特的速度遗忘。那是1999年,我15岁。我可以在10分钟内背完一整篇的《卖油翁》,可以在半个小时内写完800字作文,可以画出生物的有
西安优胜美地有限公司旗下网站
郑重声明:未经授权禁止转载、摘编、复制或
建立镜像,如有违反,追究法律责任。二次元同好交流新大陆
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
1. 创建一个项目,拖拽一个ScrollView到故事板中,如下图&2. 选中ScrollView,添加约束。3. 拖拽一个View到ScrollView上, 然后添加上下左右四周约束。&4.添加完之后, 可能会报一个错, 如下图, 这个暂时别去管。 &5.&我们先确定一下, 我们是需要水平方向的滚动还是竖直方向的滚动,或者水平方向和竖直方向都需要滚动。a.水平方向和竖直方向都需要滚动的话, 不用添加b.水平方向滚动需要添加下面一个约束c.竖直方向需要添加下面一个约束6.我们以水平方向滚动为例, &我们需要确定我们想要的宽度, 添加一个固定的宽度的约束。7.如果是想要动态设置ScrollView的宽度,也就是设置View的宽度约束的值, 我们将其拉成属性, 然后修改其值。8. 如果是确定的宽度, 可以在- (void)updateViewConstraints这个方法中修改,也可以在别处修改。&这样子就OK了。 可以通过代码来添加view然后就可以实现分页滚动了。自动布局需要自己去多多实践, 有很多细节需要注意的。&&&&&&
阅读(5493)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'Storyboard、xib中的UIScrollView使用autolayout,使其能够滚动',
blogAbstract:'在使用storyboard和xib时,我们经常要用到ScrollView,还有自动布局AutoLayout,但是ScrollView和AutoLayout 结合使用,相对来说有点复杂。根据实践,我说一下我的理解,在故事板或xib中,ScrollView是根据其下面的一个View的大小来确定ContentSize的大小。看一下效果1. 创建一个项目,拖拽一个ScrollView到故事板中,如下图&',
blogTag:'ios,autolayout,翻页,uiscrollview',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:3,
publishTime:6,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}在UIScrollView中使用Autolayout布局 - 推酷
在UIScrollView中使用Autolayout布局
之前翻译过一篇《
》(以下简称《如何》)。在这篇文章中很详细地解释了在UIScrollView中使用自动布局的种种限制和注意事项。
我本来以为这已经解释得很清楚了。但是仍然有读者说文中示例虽然可行,但在其他界面上却无法做出同样的效果。
考虑到也许是文中例子过于复杂,使得有的读者看虽然看得懂,照着文中步骤也能做出效果,但由于没有真正理解文中的原意,一旦离开例子实现自己的UI就犯难了。
我们另外举一个简单例子,以此来充分理解UIScrollView在Autolayout下使用的基本原则。
《说明》一文中列举了很多原则,但最根本的其实只有以下两条:
原则1:UIScrollView的size依赖于subviews
首先在画布中拖入一个UIScrollView。用Pin按钮,随意设置其布局。甚至不用设置。
因为《如何》一文中的第一个原则是:UIScrollView的布局依赖于subviews。因此我们设置UIScrollView的布局约束是没有用的。我们只需要将subviews的size都明确下来,这条原则自然不成问题。
UIScrollView的size(即contentSize)则根据subviews所占据的size来计算。当然,如果contentSize的内容不足以布满整个UIScrollView时,滚动条将不会出现,UIScrollView也不会滚动。
原则2:subviews的size不能依赖于UIScrollView
比如你设计这样一个布局:
UIScrollView包含两个subview:UILabel和UITextField。
UILabel的Pin约束设置如下:
注意,这里我们固定了UILabel的宽度为100,而Label的高度也是固定的(lines设置为1)。这是可行的,因为它的宽高都没有依赖于UIScrollView了。
但我们不可能所有控件都使用固定的宽高,那样就不叫做“自动布局了”。
例如,UITextField,我们准备设置它的Pin约束为:
这样,UITextField没有固定的宽高了。这样说也不对,其实UITextField是有固定高的,对于一个使用了默认边框类型(圆角)的UITextField来说,它的高度固定为30。但对于宽度则是由左边缘和右边缘决定。
从上图可知,它的左边缘距离左边的UILabel 8个像素,右边缘距superview的右边缘14个像素。这样UITextField的宽度应该由右边缘的x减左边缘的x得到。
由于左边的UILabel为固定宽度,所以UITextField的左边缘位置也是固定的。但右边缘的x则是相对于superview而定的,这就不可能固定。
我们知道在Xcode6的自适应布局上,view的大小实际上是根据设备而变的,在iPhone上是一个size,在iPad上又是另一个size。
但无论如何,我们的UITextField无论在何种设备上都能自适应。无非是在iPhone上略显窄一点,在iPad上则宽一些。
但是当你设置这样的约束后,你会发现出现了红色的布局警告:
这表示UITextField的宽度在运行时会比布局时短的多。运行效果如下:
这根本不是我们想要的样子。
这是因为UITextField违反了原则2:subviews的size不能依赖于UIScrollView。
如上所述,UITextField的宽度取决于superview的宽度。但和你理解的不同,UITextField的superview是UIScrollView而不是ViewController的view。
为什么subviews 的size不能依赖于UIScrollView?
很简单,因为原则1:UIScrollView的size依赖于subviews。如果subviews的size再依赖于UIScrollView,则布局引擎就混乱了。就像我们解一个方程式,x的求解要先知道y的值,而y的值却要先明确x的值,这个就无解了。
要解决这个问题,我们需要把UITextField的宽度明确,起码不能和靠不住的UIScrollView的size相关。我们可以这样设置UITextField的宽度约束:
找到UITextField的size面板,双击Tailing Space to这条约束(如果单击则仅仅是卸载而不是删除):
然后按delete键。
右键,从UITextField拖到ViewController的view,然后选择Equals Widths。然后双击新建的这条约束,修改为如下样子:
注意First Item和Second Item项,不要将二者搞反了。
运行程序:
iPhone和iPad上UITextField都能很好地适应。
对于高度的布局显示也是一样的,笔者就不一一举例了。总之,不得违反上述原则。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致如何在 AutoLayout 中使用 UIScrollView_百度知道
如何在 AutoLayout 中使用 UIScrollView
我有更好的答案
先.: View (UIViewController 的 view) · Scroll View (UIScrollView)– 暗灰色 · Container View (UIView) – 轻灰色 · Content1 (UIView) – 红色 · Content2 (UIView) – 绿色 · Content3 (UIView) – 蓝色 最终.,我在故事板中定义如下视图层次
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 sdautolayout使用方法 的文章

 

随机推荐