【问题标题】:Xcode / Swift Scrollview Layout too wideXcode / Swift Scrollview 布局太宽
【发布时间】:2016-06-10 15:16:11
【问题描述】:

我是一个团队的一员,该团队正在为 iPhone 6 开发使用自动布局的应用程序,但我们刚刚发现我们还需要支持 iPhone 4s 和 5。因为布局是为 6 的更大屏幕设计的,我们决定使用 ScrollViews。

我将此视频用作各种教程:

UIScrollView and Autolayout - Xcode 6

在大多数情况下,它是有效的。我可以上下滚动。

问题:

垂直滚动有效。但现在我还必须水平滚动,这并不理想/不应该发生。

即使模拟器设置回 iPhone 6,任何带有滚动视图的东西都会变宽,以至于用户必须横向滚动。

有什么建议吗?

我尝试了什么:

就我的眼睛所见,应用程序的某些部分确实可以顺利运行,但我还没有对这些部分应用滚动视图,因此很难判断是滚动视图的问题还是其他原因。不过,我确实找到了这个:

不工作(使用滚动视图 - 可以向下滚动,但宽度会被放大):

工作(不使用滚动视图 - 无法向下滚动,但 UI 与屏幕宽度匹配):

我不知道这是否真的有所作为。我也尝试将大小设置为任意/任意,但这与现有的自动布局约束有关。

我也尝试以编程方式执行此操作,但存在一些关于系统返回错误屏幕尺寸的已知问题(这会使一切变得更糟)。

【问题讨论】:

  • 一个有效的问题。每当我为不同的方向创建 ScrollView + Autolayout 时,我都会遇到类似的问题。我已经修复了它们,但仍然不知道如何,因为它们是通过反复试验完成的。如果有人也知道答案,我会很感兴趣。
  • 滚动视图非常难以使用。我不得不谷歌搜索 UIScrollView 教程来弄清楚如何很好地实现它们
  • 澄清一下,iPhone 4/5 只需要垂直滚动?
  • @rigdonmr,我使用的教程视频链接在那里。奇怪,我之前在另一个项目中使用过它,据我记忆,没有任何类似的问题 - 加上视频使用 iPhone 进行测试。
  • 仅供参考,与其他视图不同,将滚动视图的顶部、右侧、底部、左侧的视图约束常量设置为 0 不会将内容大小设置为滚动视图的界限。嵌入子视图的宽度是内容大小。作为一个实验,您可以将内容视图的宽度设置为滚动视图宽度的 x3,并将边缘约束的常量设置为 0。通常这会产生冲突,但对于滚动视图子视图则不会。

标签: ios xcode uiscrollview autolayout interface-builder


【解决方案1】:

使用 ScrollView 和 AutoLayout 时,您应该将所有内容放在内容视图 (UIView) 中并将其固定到滚动视图。 (我假设你这样做了)

现在,如果你想禁用水平滚动(比如在 TableView 中),那么你需要在 scroll viewcontent view 之间添加一个 equal width constraint

【讨论】:

  • 哇!谢谢!做到了!
  • 这里是一些示例 Swift 3 代码:scrollView.addConstraint(NSLayoutConstraint(item: scrollView, attribute: .width, relatedBy: .equal, toItem: contentView, attribute: .width, multiplier: 1, constant: 0.0))。逻辑是,通过设置此约束,您可以防止滚动视图的任何内容水平溢出,从而使其成为仅垂直滚动的滚动视图。相反,您可以在代码 sn-p 中将height 的两个width 属性交换为仅水平滚动的scrollView。
  • 太荒谬了,您需要一个容器来存放您的容器,但这确实解决了我的问题,谢谢!
猜你喜欢
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多