微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当标签大小增加时,增加 UILabel 上 UITapGestureRecognizer 的点击区域

如何解决当标签大小增加时,增加 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 举报,一经查实,本站将立刻删除。