【问题标题】:ScrollRectToVisible Not Working As IntendedScrollRectToVisible 未按预期工作
【发布时间】:2011-08-26 17:22:57
【问题描述】:

我有一个视图,其中包含从屏幕顶部到屏幕底部的文本字段。显然,底部的文本字段在弹出时会被键盘覆盖,所以我着手解决这个问题。

我在viewDidLoad方法中注册通知,然后在发送UIKeyboardDidShowNotification时,调用这个方法:

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    scrollView.contentInset = contentInsets;
    scrollView.scrollIndicatorInsets = contentInsets;

    [scrollView scrollRectToVisible:activeField.frame animated:YES];
}

问题是根本没有滚动,更不用说滚动到可见了。我在这里错过了什么?

我所有的文本字段都在滚动视图内,等等。

提前致谢。

【问题讨论】:

  • 设置 contentSize,确保宽度和高度都不为零。然后从 contentInset 高度添加或减去,直到它起作用。 scrollView.contentSize = CGSizeMake(kbSize.width, kbSize.height); scrollView.contentInset = UIEdgeInsetsMake(0, 0, kbSize.height - 250, 0); //(上、左、下、右)

标签: iphone objective-c xcode


【解决方案1】:

This 是一个类似的帖子,其中scrollRectToVisible: 无法正常工作,通过确保正确设置contentSize 可以找到解决方案。希望有帮助!

【讨论】:

  • @Yatheesha 因为UIScrollView 只有在其大小与其contentSize 之间的大小差异足够大时才会使用该方法滚动(即,如果contentSize 比@987654327 长50 个点) @,您将能够向下滚动 50 点,但不能再滚动。在这种情况下,我们希望滚动更多以将文本滑到键盘上方,因此我们让 UIScrollView 相信还有更多要显示的内容,我们这样做了通过增加contentSize
  • 虽然答案被重定向到其他链接,但帮助我解决了我忘记将底部添加到滚动视图中添加的子视图,contentSize 宽度是完美的,但高度是 0!谢谢:)
  • ..总是contentSize,不是吗;-)
  • @Jay 这里也一样...我非常确定contentSize 是完美的 - 但不,它不是...(在我的情况下是宽度)
【解决方案2】:

以后给自己发消息:你的contentSize宽度是0。

contentSize的宽度为0时,scrollRectToVisible无效。

另外,由于 AutoLayout,您的 contentSize 宽度为 0。

https://developer.apple.com/library/archive/technotes/tn2154/_index.html

另外,这是因为您没有明确设置内容视图的宽度,而是在做一些愚蠢的事情,比如将内容视图居中在滚动视图中,也许是 UIScrollView 不够聪明弄清楚在这种情况下如何在自动布局的上下文中设置contentSize

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 2021-06-04
    • 2022-01-24
    • 2015-05-11
    • 2020-05-15
    • 2014-10-31
    • 2018-02-12
    • 2014-01-20
    • 2015-01-13
    相关资源
    最近更新 更多