【问题标题】:iOS TextView inside ScrollView caret misplacement in new line新行中的 ScrollView 插入符号错位中的 iOS TextView
【发布时间】:2017-12-15 08:50:48
【问题描述】:

我有以下布局,即 well know approach 在 ScrollView 中使用 TextView。



总体来说效果很好,但有一个小问题让我很恼火。


查看插入符号。插入新行时,自动布局不会更新。它仅在添加新字符时才更新约束,并且突然该行再次正确显示。 对于上下文,当仅使用不带滚动视图的 TextViews 时,这非常有用,所以我想知道是否需要手动执行更多操作来模拟该行为。

现在我在textViewDidChange 代表上触发view.layoutIfNeeded() 来解决问题,但我觉得这有点矫枉过正。

提前致谢。

【问题讨论】:

  • 编辑时可以减少UITextView的高度约束。
  • TextView 没有高度限制,但同样我可以在编辑时减少底部边距或其他东西,但这种方法对我来说也很hacky:/

标签: ios swift uiscrollview autolayout uitextview


【解决方案1】:

好问题!

在您的 textViewDidChange 方法中使用它:

- (void)textViewScrollToCarretIfNeeded:(UITextView *)textView {
    CGRect caretRectInsideTextView = [textView caretRectForPosition:textView.selectedTextRange.start];
    CGRect caretRectInsideScrollView = [self.scrollView convertRect:caretRectInsideTextView fromView:textView];
    [self.scrollView scrollRectToVisible:caretRectInsideScrollView animated:YES];
}

您可以使用在线服务将其转换为 swift。

【讨论】:

  • 我试过这种方法,但它不起作用。这是转换为 swift 5 的代码:func textViewScrollToCarretIfNeeded(textView: UITextView) { let caretRectInsideTextView = textView.caretRect(for: textView.selectedTextRange!.start) let caretRectInsideScrollView = scrollView.convert(caretRectInsideTextView, from: textView) scrollView.scrollRectToVisible(caretRectInsideScrollView, animated: true) }
猜你喜欢
  • 2019-03-30
  • 2018-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
相关资源
最近更新 更多