UITextView 不在 tvOS 中滚动

UITextView not Scrolling in tvOS

我的电视应用程序中有一个 UITextView,当我尝试使其可聚焦时,UI 无法使其可聚焦并且我无法滚动它。我读了一些关于它的问题,有些人说这是一个已知问题,我们应该使用故事板。实际上我正在使用故事板,但仍然无法正常工作。我也尝试过使它成为 selectablescrollEnableduserInteractionEnabled 然后最后也尝试了这行代码但是其中 none 正在工作。

descriptionLbl.panGestureRecognizer.allowedTouchTypes = [NSNumber(integer: UITouchType.Direct.rawValue)]

我还尝试打印 UITextViewbounds abd contentSize,这是日志

Content Size (740.0, 914.0)
Bounds (25.0, 0.0, 740.0, 561.0)

这是我的代码,有人可以帮助我吗

@IBOutlet weak var descriptionLbl: UITextView!
var currentModel : Model?


override func viewDidLoad() {
    super.viewDidLoad()

    descriptionLbl.selectable = true
    descriptionLbl.scrollEnabled = true
    descriptionLbl.userInteractionEnabled = true


    descriptionLbl.panGestureRecognizer.allowedTouchTypes = [NSNumber(integer: UITouchType.Direct.rawValue)]


    descriptionLbl.text = (currentModel?.description)! + (currentModel?.description)! + (currentModel?.description)!
    descriptionLbl?.contentInset = UIEdgeInsets(top: 0.0, left: -25.0, bottom: 0.0, right: 0.0);


}

我想我不应该做这么多技巧,但它无论如何都不起作用。焦点实际上来到 UITextView 但它不滚动。有什么想法吗?

我相信你想要间接接触,而不是直接接触。以下是我如何设置可聚焦、可滚动的 UITextView:

self.selectable = YES;
self.userInteractionEnabled = YES;
self.panGestureRecognizer.allowedTouchTypes = @[@(UITouchTypeIndirect)];

在 Swift 2.1 中,这对我有用:

myTextView.userInteractionEnabled = true
myTextView.selectable = true
myTextView.scrollEnabled = true
myTextView.panGestureRecognizer.allowedTouchTypes = [UITouchType.Indirect.rawValue]

希望对您有所帮助。

根据之前的回答,以下是 Swift 3.0.1 中对我有用的内容:

  • 我不得不子类化 UITextView 以覆盖 canBecomeFocused 到 return true
  • 我必须设置 panGestureRecognizer.allowedTouchTypes = [NSNumber(value: UITouchType.indirect.rawValue)]
  • 我必须在代码中设置 isUserInteractionEnabled = true - 在 Interface Builder 中设置它似乎不够
  • 我必须在 Interface builder 中检查 "Scrolling Enabled"(在代码中设置 isScrollEnabled = true 也可以

我发现的其他一些细节:

  • bounces = true 使滚动感觉更自然(必须在代码中设置;不遵守 IB 设置)
  • showsVerticalScrollIndicator = true 必须在代码中设置;不遵守 IB 设置
  • 覆盖 didUpdateFocus(in:with:) 以更改背景颜色以直观地指示焦点。

对于 Swift 5,这对我有用:

    textView.isUserInteractionEnabled = true;
    textView.isScrollEnabled = true;
    textView.showsVerticalScrollIndicator = true;
    textView.bounces = true;
    textView.panGestureRecognizer.allowedTouchTypes = [NSNumber(value: UITouch.TouchType.indirect.rawValue)]

如果你用objective-C来做这个,就很样本了:

    _textView.panGestureRecognizer.allowedTouchTypes = @[@(UITouchTypeIndirect)];
    _textView.selectable = YES;
    _textView.scrollEnabled = YES;
    _textView.userInteractionEnabled = YES;

以上这些已经足够了,但是,如果你使用swift来做这个,它是行不通的。