【发布时间】:2013-07-10 06:03:31
【问题描述】:
我有一个 UIScrollView 和一个 UIView 作为子视图。 UIView 有一堆垂直排列的数据输入字段——本质上只是一个固定格式的数据输入表单。
我想保持UIView's 的垂直大小并调整其水平大小以匹配UIScrollView 的大小,这取决于设备的方向。请注意,这都放在UISplitViewController 的详细信息视图中。
因此,用户必须垂直滚动而不是水平滚动,因为UIView 上的所有文本字段都应自行调整大小以适应屏幕水平。
目前,如果我通过更改框架宽度以匹配 UIScrollView's 框架宽度来调整 UIView 的大小,那么 UIView 子视图(文本字段)不会根据 IB 中的约束设置调整自身大小。 UIView 似乎被剪掉了。没有水平滚动,所以这方面工作正常。
我在UIView 和UIScrollView 上设置了自动调整子视图。
关于在这里做什么的任何提示?另外,如果设备方向发生变化,我将在哪里放置代码来调整 UIView 的大小?
其他信息。
我在 IB 中创建了 UIView,作为与包含 UIScrollView 的 DetailViewController 相同的 NIB 中的单独视图。因为它比UIScrollView 高得多,所以我可以找到在 IB 中创建它的唯一方法是将其设置为所需宽度和高度的单独视图。然后,我创建一个 IBOutlet 并将此视图作为子视图添加到 viewDidLoad 方法中的 UIScrollView。除了UIView 子视图没有水平调整大小之外,这一切似乎都可以正常显示。
关于我在这里可能做错的任何建议?
【问题讨论】:
-
约束设置是什么?这应该可以通过自动布局来实现。
-
你会想,但很明显我错过了一些东西。正如下面的 Rakesh 指出的那样,未设置 UISCrollView 和 UIView(其子视图)之间的约束,因为 UIView 不在 IB 的 UIScrollView 内。我以为我可以通过更改 UIView 的框架以匹配 UIScrollView 的宽度来调整 UIView 的大小,但是如果我简单地使用 UIView.frame = newFrame,那么 UIView 不会调整其子视图的大小。
-
也许我需要按照下面 Rakesh 的评论禁用自动布局。我会尝试这些建议,让你知道我的进展。
-
Rakesh 和我,都是同一个人。 :D 无论如何,不要手动设置框架(如果你这样做,你也必须使用 layoutSubviews 来定位子视图),你为什么不设置 UIView 也使用约束(以编程方式)或者只是使用其他方式我在回答中提到过?
-
我也用另一个选项更新了答案。看看吧。
标签: objective-c uiview uiscrollview