我有UIViewController
嵌入UITableView
。此表视图的高度为整个屏幕的3/4。 UIViewController
的剩余1/4有一个四舍五入的UIButton
,会在父视图的顶部触发新的UIView 。 (UITableView
)。
实例化并调用UIView
后台设置为:
self.backgroundColor = UIColor(black: 1, alpha: 0.5)
它通常会使用黑色透视背景填充整个视图,然后会有一个额外的UIView
具有以下约束:
Leading: 10
Trailing: 10
Top: 50
Bottom: 50
反过来,这会在tableView
之上给我一个'卡'效果。然后,此“卡片”视图具有UITextview
属性,当用户点击嵌入了textview的视图时,该属性应显示键盘。
问题:
选择UITextview
或甚至触摸此“卡片”视图后,正在选择背景表并与之进行交互。 “卡片”文本字段不会提升键盘,也不会使自己单独交互,因为父表控制器似乎正在接触触摸事件。
在iOS 11中遇到此问题是否有任何解决方案?我从未在iOS 10中遇到过这个问题。我正在使用iPhone X来进一步说明我的问题。
以下是实际问题的一个示例。
注意:如果我要选择卡片本身的暗区,表格视图将接收触摸事件,但不会接收卡片视图中的文本区域。此卡片视图显示键盘的原因是我使用textview.becomeFirstResponder
方法在代码中手动调用它。
附加说明:我还在整体呈现子视图中启用了isUserInteractionEnabled = false
。仍然不起作用,父视图只接受触摸。
信用卡代码
class Card: UIView {
// instantiating the textview
var textview = UITextview()
var cardView = UIView()
private override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = UIColor(black: 1, alpha: 0.5)
self.cardView.backgroundColor = UIColor.white
self.cardView.layer.cornerRadius = 8
// Just demo the textview
self.textview.frame = CGRect(x: 10, y: 100, width: 300. height: 100)
self.addSubview(cardView) // adding the cardView as a subview to the background colored view
cardView.addSubview(textview)
}
required init?(coder aDecoder: NSCoder) {
fatalError("Error")
}
private func ConstrainCardWith() {
// Constraints
}
}
extension UIView {
func Width()-> CGFloat {
return UIScreen.main.bounds.size.width
}
func Height()-> CGFloat{
return UIScreen.main.bounds.size.height
}
}
答案 0 :(得分:0)
问题是你的容器视图(cardview)没有框架,所以你的子视图(textview)不能触摸因为它超出范围,所以只需在卡片视图中添加一些框架就可以解决这个问题