【问题标题】:UIScrollView contentInset not workingUIScrollView contentInset 不起作用
【发布时间】:2014-02-04 06:07:14
【问题描述】:

我遇到了contentInset 无法让 UIScrollView 与键盘弹出窗口一起工作的问题。它有点有效:出于某种原因,我需要大数字(可能高于视图的高度?)它才能做任何事情,尽管contentInset 的所有文档都显示像40.0 这样的小数字(例如条)或键盘高度。

我已通过以下步骤在全新的应用程序上重现了该问题:

  1. 使用 Xcode 新项目创建新的单视图应用程序
  2. 在故事板上,拖入一个滚动视图,填充整个视图大小
  3. 在情节提要上,在屏幕最底部(滚动视图内)拖入一个按钮
  4. 将滚动视图链接到 ViewController 中的新属性
  5. 将按钮链接到 ViewController 中的方法
  6. 让按钮的按下方法设置contentInset

ViewController 的代码如下:

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@end

@implementation ViewController
- (IBAction)button:(id)sender {
    self.scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 600, 0.0);
}
@end

我缺少什么/为什么需要大量数字?

【问题讨论】:

    标签: ios iphone objective-c uiscrollview uikit


    【解决方案1】:

    检查 self.scrollView.contentSize 是否设置正确。如果 contentSize.height 为 0(按照您的步骤将是这种情况),则需要大插图。

    尝试将 [self.scrollView setContentSize: CGSizeMake(320, 568)]; 添加到按钮方法中,您会注意到您的插图现在将按预期运行。

    【讨论】:

    • 谢谢。我之前看过该属性,但我没有意识到在设置contentInset 后它会重置为{0,0}。我必须在插入之后设置contentSize
    • @Matt 我不经常使用UIScrollView,但这很有趣。为什么设置contentInsetcontentSize 会被重置?那么这是否意味着合乎逻辑的步骤是始终先设置contentInset,然后再设置contentSize
    • @Unheilig 设置 contentInset 不应重置 contentSize
    • @Matt 好的,很酷。我的问题是基于 OP 在上面第一条评论中的主张。
    • @Unheilig 我认为在这种情况下发生的情况是,将 UIButton 放入 UIScrollView 会导致 Autolayout 将 contentSize 设置为 0。 Autolayout 似乎优先于在 viewDidLoad 中设置 contentSize。
    【解决方案2】:

    Matt 是对的,它与self.scrollView.contentSize 有关。我正在使用自动布局,而我缺少的链接明确地将滚动视图的contentSize 属性设置为与我的 contentView 的帧大小相同(contentView 是我的滚动视图中包含所有其他视图的视图)。我的 contentView 被编码为根据我放置在其中的元素来确定其大小。它们在 contentView 上“推出”,因此动态驱动 contentView 的大小。作为viewDidLayoutSubviews 中的“最后一步”,我将此动态大小链接到scrollView.contentSize。现在一切正常。

    // Auto Layout Solution
    - (void)viewDidLayoutSubviews
    {
        [super viewDidLayoutSubviews];
        self.scrollView.contentSize = self.contentView.frame.size;
    }
    

    【讨论】:

      【解决方案3】:

      就我而言,我只是忘记在 Interface Builder 中连接 ScrollView...

      【讨论】:

        【解决方案4】:

        我在使用带约束的自动布局时遇到了同样的问题。滚动视图拒绝与 contentInset 一起移动,直到我在keyboardWillShow 的末尾添加了以下行,然后一切都按预期工作。如上所述,我怀疑自动布局正在重置 contentSize。

        scrollView.contentSize = CGSize(width: scrollView.frame.width, height: scrollView.frame.height)
        

        【讨论】:

          猜你喜欢
          • 2013-10-04
          • 1970-01-01
          • 1970-01-01
          • 2014-05-21
          • 2017-01-20
          • 1970-01-01
          • 2010-12-31
          • 1970-01-01
          • 2013-03-09
          相关资源
          最近更新 更多