uiscrollview——我理解正确吗?

Posted

技术标签:

【中文标题】uiscrollview——我理解正确吗?【英文标题】:uiscrollview--do I understand this correct? 【发布时间】:2015-09-01 01:50:19 【问题描述】:

好的,我已经花了好几个小时试图解决这个问题。在这里阅读了无数其他问题,这些问题帮助我了解了 UI 滚动视图的工作原理,但并没有帮助我在我的应用程序中实际实现一个。我想我终于明白了——但这似乎并不正确。有人可以告诉我在下面的过程中我哪里出错了(如果我是的话):

    拥有新的空视图控制器。 将滚动视图添加到视图控制器。 在滚动视图上设置约束:将 0、0、0 和 0 固定到视图。 在滚动视图中插入新的 UIview。重命名为 contentView 对 contentView 施加约束:0、0、0 和 0,全部针对滚动视图。

现在这里是棘手的部分:uiscrollview 没有特定的大小——它只采用其中的容器 (contentView) 的大小。所以除非你给 contentView 一个特定的高度和宽度,否则它会说“scrollview has ambiguous scrollable height/width.”

好的,这是有道理的。所以我希望可滚动的内容高度为 900,所以我将 contentView 的高度设置为 900。但是,我不想要水平滚动。用户不喜欢它,它使用户界面变得丑陋。但是,问题是我必须将 contentView 设置为某个宽度,否则宽度为 0 并且其中没有内容显示。

所以,我选择了一个特定的宽度,例如 320。这对 iPhone 4S 和 5/5S 非常有用。如果 4.7" 和 5.5" iphone 不存在,那就没问题了。但对于较大的 iphone 来说就有点尴尬了,因为滚动视图上的内容不能完全穿过屏幕,它会突然结束并且看起来不美观。

那么,有没有办法解决这个问题?我过去一直只是使用 tableview,但现在我需要访问 uitablecell 类不能做的事情,这不是一个选择。我尝试将 contentView 设置为与 Superview 相同的宽度,但这也不起作用,我仍然收到消息“scrollview 具有不明确的可滚动宽度”。我只希望 iphone4/5 的 contentView 的宽度为 320,而 6/6 plus 的宽度为 400。这可能吗?

【问题讨论】:

swift 还是 Objective-C? 抱歉忘了标注,很快 【参考方案1】:

将滚动视图的内容视图限制为与 视图(即包含滚动视图的视图)相同的宽度。绝对不要硬编码宽度。

编辑:终于!这是我刚刚创建的故事板的屏幕截图。如果有人需要,我可以将项目代码放在 GitHub 上。

【讨论】:

对于高度,我从不明确设置(在代码中或通过约束)。相反,您将所有内容视图的子组件相互垂直约束,并且在顶部和底部子组件的情况下,分别约束到内容视图的顶部和底部,以便系统可以计算内容的精确高度查看。 我尝试了您之前发布的代码(显然已被删除),但也没有用。 NRitH:我试过这个,它的工作原理是我在视图上放置一个元素(例如标签),给它的 contentView 提供约束,然后在模拟器中正确显示。但是,当我把它放在视图上时,它就消失了,所以屏幕上的所有元素都必须“盲目地”放置在那里。我还收到消息“contentView,预期宽度 = 600,实际宽度 = 0” 我会制作一个故事板。 @NRitH,我不让系统进行这些计算,我自己做,因为我的视图是和需要定制的,但我明白了,我做 我不确定自定义视图如何影响任何事情。我完全在情节提要中完成了极其复杂的布局。

以上是关于uiscrollview——我理解正确吗?的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollViews 中的 UIViewControllers:我没有正确理解啥?

UIScrollView 内的可选 UITableViewCells

IOS 管理键盘 - 上移 UIScrollView 内容

UIScrollView 后面如何与 UIView 交互

通过代理监听UIScrollView的滚动事件 Objective-C语言

如何保持 UIscrollview 框架固定但动态范围