【问题标题】:Scroll in UIScrollView with tvOS使用 tvOS 在 UIScrollView 中滚动
【发布时间】:2018-01-23 13:22:02
【问题描述】:

我在我的 tvOS 应用程序中的 UIScrollView 内滚动内容卡住了。

我有一个高度 = 400 和宽度 = 400 的滚动视图。在这个滚动视图中我有一个高度 = 800 和宽度 = 400 的不可滚动 UITextView。所以我想滚动这个文本。

但是我的滚动视图没有滚动,我没有看到任何滚动指示器,而且我的滚动视图也有 isFocused 值 = false。我该如何解决这个问题?

附言。更新 我创建了单独的 ViewController(下图)。 它有黑色 ScrollView 和白色视图,高度很大,中间有标签。 ScrollView 具有固定的宽度和高度,并且由于某种原因没有滚动!我什至没有连接任何单独的类 - 只是从 Interface builder 中创建的。

【问题讨论】:

  • 你是如何设置约束的?
  • 您的 UITextView 是否可编辑?如果你的 UITextView 是可编辑的,那么 UIScrollView 的滚动将不起作用。
  • 1) 我正在使用 Interface Builder 设置约束 2) 我的 TextView 不可编辑

标签: swift uiscrollview focus tvos tvos10


【解决方案1】:

UIView 默认情况下是不可聚焦的(因此在 tvOS 中它不能滚动)。您必须对其进行子类化以覆盖 canBecomeFocused:

class myUIView: UIView {
    override var canBecomeFocused: Bool {
        return true
    }
}

然后在您的示例中,使用类 myUIView 而不是 UIView 作为您的长白色视图。设置正确的约束,您也不需要在 IB 中设计控制器视图边界之外的视图。使用链接的要点检查 this answer 以了解如何构建约束。

【讨论】:

  • 正确,并且还需要在scrollview的panGestureRecognizer上设置allowedTouchTypes:self.scrollView.panGestureRecognizer.allowedTouchTypes = @[@(UITouchTypeIndirect)];
【解决方案2】:

我认为你可以使用

func gestureRecognizer (_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool 

判断视图和滚动的方法

根据你触摸的视图做某事进行拦截

【讨论】:

  • 只需要允许滚动视图上的触摸手势:scrollView.panGestureRecognizer.allowedTouchTypes = [NSNumber(value:UITouchType.indirect.rawValue)]
【解决方案3】:

有一些方法可以解决您的问题。

  1. 请检查情节提要中的滚动视图,是否检查了滚动或垂直指示器?
  2. 如果您只想滚动 textview 内容,您可以让您的 textview 可滚动
  3. 您的约束存在问题,您需要将 textview 的高度、垂直空间顶部、垂直空间底部明确添加到滚动视图。

希望这些建议可以帮助到你

【讨论】:

  • 不幸的是它没有帮助
【解决方案4】:

因此您必须将滚动视图的内容大小设置为大于滚动视图边界,因此您应该将 contentsize 设置为 (400, 800),可能在您的 xib 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多