如何解决当标签大小增加时,增加 UILabel 上 UITapGestureRecognizer 的点击区域
我在 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,height: frame.height)
nameLabel.isHidden = false
// Make the tap frame same as the nameLabel's frame
}
}
}
我该如何完成这项工作?
解决方法
点击手势识别器附加到视图,并响应视图框架内的点击。它没有自己的水龙头区域。如果您增加标签的大小,则点击区域的大小也应增加。
我记得读过 Apple 的建议,可点击区域至少为 40x40 点。您可能希望在标签顶部放置一个不可见的视图(称为 tapView
),该视图比标签稍大(您可以获取标签的框架,并使用负值调用 CGRect.inset(by:)
)边缘。使用生成的矩形作为 tapView
的框架,并在标签顶部添加点击视图。)如果你这样做,那么你应该把代码放在你的视图控制器的 viewDidLayoutSubviews()
方法中(和随时更改 nameLabel
标签)以调整 tapView
的框架。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。