【发布时间】:2013-07-28 08:37:04
【问题描述】:
我使用的是 iOS 6 和 Xcode 4.6,并使用 Interface Builder 向我的控制器添加了一个 UIScrollView,它使用了所有可用空间。在这个UIScrollView 中,我添加了一些视图(UIImageView、UITextView 和UITableView(我禁用了UITextView 和UITableView 的滚动)。
在:
- (void) viewDidLayoutSubviews;
方法我通过增加它们的高度来调整所有视图的大小(以适应它们各自的内容)。
然后,我设置我的UIScrollView 的 contentSize 以使其适合其内容(我的 3 个视图)。
调整大小有效,运行时我可以在我的应用程序中看到它们。 此外,滚动效果很好(contentSize 是正确的,因为我可以滚动)。
但是,我有一个大问题:当我滚动时,我的 3 个视图被调整为它们的初始大小(而不是保持我通过 frame 属性分配的大小)。
我的所有视图都通过 Interface Builder 添加到我的故事板中。
你知道我做错了什么吗?为什么滚动时我的UIScrollView's 内容会重置其大小?
感谢您的帮助
【问题讨论】:
-
为什么不使用 viewDidLoad 方法?我使用 viewDidLoad 方法,当有相同的任务时,它对我来说效果很好。
-
是的,正如 Timur 所说,您需要在 viewDidLoad 方法中纠正您的代码。因为当 UIScrollView 滚动时,它会调用它的 layoutSubviews 方法及其子视图。它会引导他们的子视图回到原来的位置。
-
我已经尝试在 viewDidLoad 中调整我的视图大小,但它不起作用(顺便提了一个问题stackoverflow.com/questions/17907178/…)(这是因为我的控制器是从推送事件和视图加载的从情节提要添加)。所以我必须改变 viewDidLayoutSubviews 中的大小。我应该怎么做?
-
你可以尝试为你的scrollView添加setAutoResizeSubView到NO
-
我的建议是在 viewDidLoad 中添加子视图,而不是在 IB 中,因为子视图无论如何都会改变。
标签: ios xcode4 interface-builder