【发布时间】:2018-08-24 11:03:33
【问题描述】:
我在故事板 ViewController 上有一个 UIButton。当我将数据加载到表单中并且布局发生显着变化时,按钮无法识别触摸动作。
我发现当按钮在滚动视图上可见时,如果填充了数据,则触摸操作有效。
如果数据太长,按钮一开始是不可见的,只是当它滚动到显示中时,触摸动作不起作用。
我正在检查按钮上方是否有东西,但什么也没有。我试过改变按钮的zPosition,没有解决问题。
可能是什么问题?
我已经从 UIScrollView 和 UIButton 制作了自定义类来检查触摸事件是如何触发的。它显示出相同的行为,这是显而易见的。如果按钮在开始时可见,则触发 UIButton 的 touchesBegan 事件。如果按钮向下移动并且在开始时不可见,则永远不会触发它,而是调用滚动视图的 touchesBegan。
根据我加载到页面中的数据大小,有时按钮在开始时是可见的,但表单仍然可以滚动一点。在这种情况下,按钮仍然可以工作,因此这种行为似乎不取决于滚动视图之前是否滚动,仅取决于按钮的初始可见性。
是否应该调用任何布局或显示刷新函数来设置按钮的行为?
如果填充的数据需要更大的空间,则确保内容视图调整大小以进行滚动的代码部分。
func fillFormWithData() {
dispDescription.text = jSonData[0]["advdescription"]
dispLongDescription.text = jSonData[0]["advlongdesc"]
priceandcurrency.text = jSonData[0]["advprice"]! + " " + jSonData[0]["advpricecur"]!
validitydate.text = jSonData[0]["advdate"]!
contentview.layoutIfNeeded()
let contentRect = CGRect(x: 0, y: 0, width: scrollview.frame.width, height: uzenetbutton.frame.origin.y+uzenetbutton.frame.height+50)
contentview.frame.size.height = contentRect.size.height
scrollview.contentSize = contentview.bounds.size
}
好的,所以另一个更新。我已将 contentview 背景着色为蓝色,并将滚动视图背景着色为白色。当我加载数据并调整布局约束的大小时,内容视图正在按预期调整大小,但是现在滚动视图正在底部。在我滚动视图后,它正在调整为适合屏幕的原始大小。现在,只有当我触摸后面的蓝色区域时,才能识别该按钮。在白色背景下,它不再被识别,所以滚动视图似乎隐藏了按钮。
【问题讨论】:
-
向我们展示将视图放在一起的代码和视图层次结构
标签: swift uibutton touch action