【问题标题】:Content of scrollview changes size when scrolling滚动时滚动视图的内容会改变大小
【发布时间】:2013-07-28 08:37:04
【问题描述】:

我使用的是 iOS 6 和 Xcode 4.6,并使用 Interface Builder 向我的控制器添加了一个 UIScrollView,它使用了所有可用空间。在这个UIScrollView 中,我添加了一些视图(UIImageViewUITextViewUITableView(我禁用了UITextViewUITableView 的滚动)。

在:

- (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


【解决方案1】:

您在情节提要中启用了自动布局。当您滚动滚动视图时,自动布局运行并根据情节提要中的约束重置您的子视图框架。

有几种方法可以解决此问题。一种方法是关闭情节提要中的自动布局。另一种方法是将出口连接到情节提要中的约束,并更新约束(而不是设置框架)以使自动布局将视图放置在您想要的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多