【问题标题】:UIScrollView autoresize contentSize?UIScrollView 自动调整内容大小?
【发布时间】:2015-11-27 04:03:54
【问题描述】:

公平的警告,我对 iOS 还很陌生,可能会遗漏一些明显的东西。

我有一个带有几个字段的UIScrollView,这些字段的高度可以改变(UITextView 可以拉伸以适应文本、可折叠字段等)。显然我希望滚动视图contenSize 适合内容以允许滚动。

现在我将它设置为重新计算并设置contentSize 每次发生变化时,这很好,但有更好的方法吗?换句话说,如果另一个开发人员现在添加了一个字段并且不记得将其添加到重新计算功能中,除非我弄错了,即使该字段在滚动视图上,滚动视图contentSize也会出错?有没有办法让它随着内容的变化而“自动”调整大小?

【问题讨论】:

    标签: iphone ios objective-c uiscrollview


    【解决方案1】:

    是的,有一种更好的方法可以通过自动布局来实现这一点。 Apple 有一个非常好的文档来使用带有滚动视图的自动布局here。我更喜欢纯自动布局方法,但是为了应用这种方法,您必须确保字段的大小不依赖于滚动视图的大小,这是有道理的。但是请确保您的约束扩展到滚动视图的所有侧面,以便滚动视图可以确定其内容的大小。

    (即@"H:|[textView(==view)]|"@"V:|[textView(50)]|"其中'|'表示textView是子视图的scrollView,'==view'只是指定textView的宽度必须和view的宽度一样'查看”。)

    【讨论】:

    • 遗憾的是我还需要支持iOS5...不过谢谢你的回答!
    【解决方案2】:

    如果您可以选择自动布局,那么就选择它——正如 Tyler 所说,自动布局为您抽象了调整大小! :) 不幸的是,我还没有使用自动布局的经验,所以我不能告诉你更多。

    据我所知,没有自动布局没有更好的方法。 没有什么像“sizeToFit”或“sizeThatFits”可以自动接管调整内容大小的任务。您必须自己重新计算内容大小。 为此,要么使用您的自定义方法进行此重新计算任务,要么查看 UIScrollView 上的一些 3rd-party 类别,这些类别已经为您实现和抽象。

    例如:UIScrollView+MTUIAdditions.m (参见UIScrollView (MTUIAdditions) 的实现)

    【讨论】:

      【解决方案3】:

      最佳解决方案

      //autoresize scrollView
      CGFloat scrollViewHeight = 0.0f;
      CGFloat scrollViewWidth = 0.0f;
      for (UIView *view in self.scrollView.subviews) {
          CGFloat height = (view.frame.size.height + view.frame.origin.y);
          scrollViewHeight = ((height > scrollViewHeight) ? height : scrollViewHeight);
      
          CGFloat width = (view.frame.size.width + view.frame.origin.x);
          scrollViewWidth = ((width > scrollViewWidth) ? width : scrollViewWidth);
      }
      
      [self.scrollView setContentSize:(CGSizeMake(scrollViewWidth, scrollViewHeight))];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        相关资源
        最近更新 更多