我在UICollectionViewCell上有一个UILabel。在UILabel上,我附加了一个UITapGestureRecognizer。我试图在UILabel的宽度增加时,增加UILabel上UITapGestureRecognizer的抽头面积。
下面是代码示例:
class BusCell: UICollectionViewCell {
var bus: Bus!
var tapGesture: UITapGestureRecognizer!
@IBOutlet weak var nameLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
addTapGestureToNameLabel()
}
// MARK: - UI
func addTapGestureToNameLabel() {
tapGesture = UITapGestureRecognizer(target: self, action: #selector(nameLabelDoubleTap(gesture:)))
tapGesture.numberOfTapsRequired = 2
nameLabel.addGestureRecognizer(tapGesture)
nameLabel.isUserInteractionEnabled = true
}
func configure(_ bus: Bus, isStereo: Bool = false) {
self.bus = bus
loadCellUI(bus: bus)
bus.updateBlock = { [weak self] in
guard let strongSelf = self else {
return
}
strongSelf.loadCellUI(bus: bus)
}
}
func loadCellUI(bus: Bus) {
nameLabel.frame = CGRect(x: CGFloat(0), y: yPosition, width: 122, height: self.nameLabel.frame.height)
if bus.isStereo {
if bus.index % 2 == 0 {
let frame = nameLabel.frame
nameLabel.frame = CGRect(x: frame.origin.x, y: frame.origin.y, width: 244, height: frame.height)
nameLabel.isHidden = false
// Make the tap frame same as the nameLabel's frame
} else {
nameLabel.isHidden = true
}
} else {
let frame = nameLabel.frame
nameLabel.frame = CGRect(x: frame.origin.x, y: frame.origin.y, width: 122, height: frame.height)
nameLabel.isHidden = false
// Make the tap frame same as the nameLabel's frame
}
}
}
我该怎么做呢?
轻击手势识别器附加到视图,并对视图框架内的轻击作出响应。它没有自己的抽头区。如果您增加了标签的大小,那么抽头区域的大小也应该增加。
我记得读过苹果公司的一篇推荐文章,说可抽头的区域至少是40x40点。您可能希望将一个不可见视图(称为TapView
)放置在标签顶部,该视图略大于标签(您可以获得标签的框架,并调用CGRECT.INSET(By:)
并将所有边缘的值为负值。将得到的矩形用作TapView
的框架,并在标签顶部添加tap视图。)如果您这样做了,那么您应该在视图控制器的ViewDidLayoutSubViews()
方法中放置代码(以及任何更改NameLabel
标签的时候),以调整“Tap view”的框架。