Xcode UIScrollView 布局 - 设置水平内容大小并水平调整子视图大小

Posted

技术标签:

【中文标题】Xcode UIScrollView 布局 - 设置水平内容大小并水平调整子视图大小【英文标题】:Xcode UIScrollView layout - set horizontal content size and resize subviews horizontally 【发布时间】:2015-02-02 17:16:46 【问题描述】:

我有一个滚动视图,它占据了整个屏幕的视图。在这个滚动视图中,有几个垂直堆叠的文本字段。由于这些文本字段太多,我使用的是滚动视图,因此用户可以向下滚动。我正在使用 Xcode 的 Preview,因此我可以将视图设置为在许多设备上工作。我遇到的问题是我希望这些文本字段改变水平大小以适应,所以没有水平滚动;但是我永远无法让他们改变大小。相反,滚动视图只是让我水平滚动。

我在 Xcode 的界面构建器(滚动视图和文本字段)中进行了设置,并让 Xcode 应用了所有建议的约束。然后,我为这些文本字段中的每一个设置了一个约束,将它们的右边缘设置为距滚动视图一定距离(我无法设置与实际视图的距离,因为滚动视图是超级视图)。这些约束不与任何现有约束发生冲突。 Xcode 建议的约束没有为这些文本字段设置宽度。

然后在viewDidLoad:方法中:[scrollView setContentSize:CGSizeMake([[UIScreen mainScreen] bounds].size.width, scrollView.contentSize.height)];

这是为了强制滚动视图使用超级视图的水平宽度。

对于我的问题含糊不清,我深表歉意。 基本上,我需要一种方法让滚动视图中的文本字段水平调整大小以适应屏幕。

【问题讨论】:

【参考方案1】:

您说您为与滚动视图相关的文本字段应用了“边缘”约束。

您应该将它们添加到与它们的超级视图相关的位置,即滚动视图的内容视图。

在处理自动布局和滚动视图时,请尝试将所有子视图视为尝试以明确的方式定义内容视图的框架,以便滚动视图可以正确“调整大小”。

Apple 已针对此类问题设置了技术说明。

https://developer.apple.com/library/ios/technotes/tn2154/_index.html

【讨论】:

如何将约束应用到内容视图? 您是否在 IB 中使用自动布局? 是的。现在,我改变了它,所以我在滚动视图中有一个视图来保存我的项目。我越来越近了,但仍然有麻烦。谢谢。【参考方案2】:

我正在使用 AutoLayout,但在滚动视图仍然水平滚动时遇到了问题,该滚动视图比屏幕宽度略窄。

这是我的解决方法:

-(void)viewDidLayoutSubviews 
    [super viewDidLayoutSubviews];
    [self.scroller setContentSize:CGSizeMake(MIN([[UIScreen mainScreen] bounds].size.width, self.scroller.frame.size.width), scroller.contentSize.height)];

【讨论】:

以上是关于Xcode UIScrollView 布局 - 设置水平内容大小并水平调整子视图大小的主要内容,如果未能解决你的问题,请参考以下文章

打开自动布局时的 UIScrollView(故事板)

嵌入导航控制器时 Xcode 滚动视图自动布局问题?

将子视图布局锚设置为 UIScrollView

带有空 UIScrollView 的可滚动内容大小歧义(XCode 6)

包含动态 TableView 高度的 UIScrollView 的自动布局

尝试理解 iOS 8 中的 UIScrollView 自动布局