ios - UITextview 嵌入 UIScrollView 时的键盘处理

标签 ios iphone uiscrollview uitextview

因此,我的 iOS 应用程序在 Storyboard中设置了一个 UIScrollview,使用自动布局将顶部、底部、前导和尾随约束绑定(bind)到 super View 。在 ScrollView 中,我有多个 UITextviews 垂直堆叠的堆栈 View 。 ScrollView 的内容大小设置得很好,我什至可以上下滚动。

现在,我的问题是键盘处理。我以苹果文档中推荐的相同方式处理键盘:Apple's Keyboard handling documentation

下面显示了有问题的特定代码,仅供引用,但它几乎只是 Apple 示例的复制粘贴:

 func keyboardDidShow(notification: NSNotification){
    var info = notification.userInfo!
    let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size
    let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height, 0.0)

    self.scrollView.contentInset = contentInsets
    self.scrollView.scrollIndicatorInsets = contentInsets

    var aRect : CGRect = self.view.frame
    aRect.size.height -= keyboardSize!.height
    if self.activeTextView != nil {
        if (!aRect.contains(self.activeTextView!.bounds)){
            self.scrollView.scrollRectToVisible(self.activeTextView!.frame, animated: true)
        }
    }
}

我的键盘处理代码适用于 UITextFields,但不适用于 UITextFields。 self.scrollView.scrollRectToVisible(self.activeTextView!.frame, animated: true) 被调用但没有滚动发生。

我研究了一下,发现 Apple 不建议在 uiscrollview 中嵌入 UITextView:Placing a text view inside of a scroll view

Placing a text view inside of a scroll view. Text views handle their own scrolling. You should not embed text view objects in scroll views. If you do so, unexpected behavior can result because touch events for the two objects can be mixed up and wrongly handled.

但是,我确实需要这种“自动”滚动到隐藏 TextView 的方式,以便与 UITextFields 的工作方式相同。有什么建议吗??

PS:我应该提一下,我不介意在 UITextViews 中禁用滚动,因为我已经使用自动布局自动调整 UITextViews 以适应其内容大小。

最佳答案

我想说虽然不推荐在 UIScrollView 中嵌入 UITextView,但这不应该阻止 ScrollView 滚动到特定的帧。您能否检查您尝试滚动到的框架 (self.activeTextView.frame) 是否“正确”?部分意外的 UITextView-inside-scrollview 行为可能是 TextView 的框架不是预期的。抱歉,我在路上,我无法尝试重现您的问题并提供更具体的解决方案,但请检查框架,如果不是您所期望的(给定 UITextView 在窗口中的位置),那么也许可以尝试转换 rect从它的父 View 到你的主视图 - 如果这是问题那么一个解决方法是将你的 UITextView 嵌入 UIView 并在键盘出现时滚动到 UIView 的框架..

好吧,试试这个代码(虽然我已经测试过它)......

  self.scrollView.scrollRectToVisible(self.activeTextView!.superview!.frame, animated: true)

关于ios - UITextview 嵌入 UIScrollView 时的键盘处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42601972/

相关文章:

ios - 未完成的执行警告

iphone - iphone 和 android 的 sip 堆栈

iphone - 从横向切换到纵向后,将 UIScrollView 保持在正确的位置

iOS 4+ : lag in CMDeviceMotion time intervals

android - infobip phonegap 插件崩溃

iphone - 图像 mask +Iphone SDK

iphone - 刷新 TabItem 中的 View

iphone - 如何使 UIView 中的内容可滚动?

ios - UIScrollView 内可选择的 UITableViewCells

ios - 如何使用 SwiftUI 删除列表上的突出显示?