【问题标题】:Buttons are disabled in a ScrollView - iOS SwiftScrollView 中的按钮被禁用 - iOS Swift
【发布时间】:2016-11-22 03:20:16
【问题描述】:

我在 ScrollView 内的视图内的视图中有一个按钮:

UIScrollView
-ContentView
--PhoneNumberView
---UIButton

如果 ScrollView 的滚动功能被禁用,则按钮会正常单击。但是,如果启用了滚动,则该按钮似乎已禁用。

这就是我发送 ScrollView 内容大小的方式:

var contentRect = CGRectZero;
for view in self.contentView.subviews {
     contentRect = CGRectUnion(contentRect, view.frame)
}
scrollView.contentSize = contentRect.size
scrollView.contentSize.height = scrollView.contentSize.height+20

我也设置了这些属性

scrollView.userInteractionEnabled = true
scrollView.exclusiveTouch = true
scrollView.canCancelContentTouches = true
scrollView.delaysContentTouches = true

我终于尝试创建 UIScrollView 的子类,结果如下:

class myScrollView: UIScrollView {

    override func touchesShouldCancelInContentView(view: UIView) -> Bool {
        return false
    }
}

但只要有任何滚动,按钮仍然不活动。

我该如何解决这个问题?

【问题讨论】:

  • 我有几个问题 - 1. 为什么要从代码本身设置内容大小(您没有设计带有自动布局的 UI)。 2.你为什么要改变scrollView的属性,比如独占触摸之类的,好像要启用和禁用滚动,那么滚动属性就足够了。
  • 一切都与内容大小有关。由于内容大小设置错误,滚动视图上的可见视图不可点击。
  • 因为我有一个 textView 可能会扩大或缩小。
  • 最好在按钮上使用UITapGestureRecognizer

标签: ios swift scroll uiscrollview


【解决方案1】:

通过设置

scrollView.exclusiveTouch = true

你告诉 scrollView 只处理触摸,所以触摸不会到达它的子视图,所以将此属性设置为false

这行代码

scrollView.delaysContentTouches = true

基本上延迟对滚动视图子视图的触摸,如果您希望按钮立即响应,则将此属性也设置为false

【讨论】:

  • 每当我将 scrollView.delaysContentTouches 设置为 false 时,滚动视图都不会滚动
【解决方案2】:

设置ContentView & Scrollview 的颜色。我认为您设置错误contentsize。而你的PhoneNumberViewcontentsize 高度之外。

编辑

【讨论】:

  • 按钮在内容视图之外,解决此问题的最佳方法是什么?
  • 正确设置内容视图的高度。
  • 计算您的内容视图的高度,并将该高度设置为 contetsize 的高度。
  • 然后从情节提要中为 contentView 的高度约束创建出口,并在 contentview 高度大于 568 时更改高度约束。
  • 我想你上面有导航栏。
【解决方案3】:

将所有子视图从 ContentView 拖到 ScrollView。并隐藏 ContentView。确保 ContentView(ContainerView of scrollView) 也应该是 scrollView 的子视图。

例如:
UIScrollView
--PhoneNumberView
---UI按钮
-ContentView(这个视图应该被隐藏)

【讨论】:

  • 请添加 4 空格缩进以正确格式化视图树(作为代码块)。最好的问候
  • 啊,好的,这是另一个合适的解决方案,谢谢(我什至不知道在换行符之前添加 2 个空格会使其像 <br> 一样工作:)
猜你喜欢
  • 2019-01-18
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2021-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多