【问题标题】:iOS 9 scroll UITextView to topiOS 9 滚动 UITextView 到顶部
【发布时间】:2015-08-26 23:55:02
【问题描述】:

在 iOS 7 和/或 8 中,以编程方式将我的 UITextView 滚动到顶部可以按 viewDidLoad 中的预期工作:

[self.someTextView scrollRangeToVisible:NSMakeRange(0, 0)];

现在它只是加载到我的其他框架中。我的猜测是它正在加载到我的 contentOffset UIEdgeInsetsMake(0, 0, 65, 0)

如何使这项工作>=iOS9?

注意:我已经尝试输入viewDidAppear,但没有结果


编辑 当我的UITextView 文本大于其视图的高度时,会出现此问题。我使用UIEdgeInsets 是因为视图以模态方式呈现,并且略大于屏幕边界。但是,在这种情况下,scrollRangeToVisible 仍然适用于 iOS 7/8,但不适用于 iOS9

【问题讨论】:

  • 你试过[self. someTextView setContentOffset:CGPointZero animated:YES];。或者在willLayoutsubviews 中使用?
  • 在我的情况下都不起作用。
  • 放入viewDidLayoutSubviews ?
  • @anhtu 之前的评论纠正了手头的问题。请张贴作为收到信用到期的答案。谢谢,应该是我尝试的第一件事,它始终是您应该尝试的第一件事。
  • 你的意思是你解决了这个问题?如何? [self. someTextView setContentOffset:CGPointZero animated:YES]willLayoutsubviews

标签: ios objective-c uitextview


【解决方案1】:

尝试将您的代码放在viewDidLayoutSubviews

【讨论】:

  • 这也是我最终做的。可悲的是,它似乎首先短暂地渲染不正确,然后自行纠正。感谢 Apple 一举降低了每个人的应用程序的质量。
  • 之前使用的是scrollRangeToVisible:(没有animated: 参数),但按照@thekenner33 的建议将其更改为scrollRectToVisible:(并将NO 传递给animated:)解决了初始渲染问题。
【解决方案2】:

我在 iOS 9 上遇到了同样的问题,这个解决方法解决了它:

@property (nonatomic) bool workaroundIOS9Bug;

- (void)viewDidLoad {
  self.workaroundIOS9Bug = [[UIDevice currentDevice].systemVersion floatValue] >= 9.0;
}


-(void)viewDidLayoutSubviews {
  if (self.workaroundIOS9Bug) {
    self.textView.contentOffset = CGPointZero;
    self.workaroundIOS9Bug = false;
  }
}

意思是,只有在第一次布置子视图时才需要额外清除 contentOffset。当用户旋转屏幕或使用视图做其他事情时,一直这样做会很痛苦。

【讨论】:

    【解决方案3】:

    您是否尝试过使用

    [self.someTextView scrollRectToVisible:CGRectMake(0, 0, x, x) animated:YES]
    

    x 的宽度在哪里?似乎scrollRectToVisible:scrollRangeToVisible: 滚动得更远。

    【讨论】:

    • 在您的示例中,将是 self.someTextView.layer 以便使用该引用,但是在我的情况下它不起作用。请编辑它,这样您就不会累积投票。或者通过在语法中添加animated来完成方法
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多