当前位置: 首页 > 知识库问答 >
问题:

当标签大小增加时,增加UILabel上UITapGestureRecognizer的抽头区域

栾鸣
2023-03-14

我在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
        }
    }
}

我该怎么做呢?

共有1个答案

司马飞
2023-03-14

轻击手势识别器附加到视图,并对视图框架内的轻击作出响应。它没有自己的抽头区。如果您增加了标签的大小,那么抽头区域的大小也应该增加。

我记得读过苹果公司的一篇推荐文章,说可抽头的区域至少是40x40点。您可能希望将一个不可见视图(称为TapView)放置在标签顶部,该视图略大于标签(您可以获得标签的框架,并调用CGRECT.INSET(By:)并将所有边缘的值为负值。将得到的矩形用作TapView的框架,并在标签顶部添加tap视图。)如果您这样做了,那么您应该在视图控制器的ViewDidLayoutSubViews()方法中放置代码(以及任何更改NameLabel标签的时候),以调整“Tap view”的框架。

 类似资料:
  • 问题内容: 您好,我有一个带有处理程序的Netty Server,该处理程序应接受字符串。似乎最多只能接收1024个字节的内容。我如何增加缓冲区大小。我已经尝试过 没有成功。 处理程序如下 } 问题答案: 您正在使用UDP吗?如果是这样,数据包将最大为1024字节。此代码注释在QOTM代码示例中: 允许的数据包最大为1024字节(默认值为768)。您可以增加或减小此值,以避免数据包被截断或分别改善

  • 为什么每次我使用PdfStamper时都会增加签名PDF的大小? 这是我的密码: 如果调用test,则生成的pdf会根据签名信息增加大小: > 我已经测试了调用上面的测试方法与一个简单的唱和每次我调用测试()的结果pdf它每次增加3,5kb(我认为由于小标志信息)。 为什么pdfstamper在我没有添加任何更改的情况下也会增加我的pdf大小?我怎样才能避免呢?390kb这是一个问题,因为我需要放

  • 我按照ActionBarDraw切换指南 我知道如何在操作栏上使用抽屉管理器来显示抽屉图标。 公共ActionBarDrawerToggle(活动Activity,DrawerLayout DrawerLayout,int drawerImageRes,int openDrawerContentDescRes,int closeDrawerContentDescRes) 主办抽屉布局的活动 用于链

  • 问题内容: 我正在使用具有8 GB RAM的Windows 2003服务器(64位)。如何增加堆内存的最大值?我正在使用该标志将堆大小增加到1500 Mb。是否可以将堆内存增加到物理内存(6 GB堆)的75%? 问题答案: 你可以在32位系统上增加到4GB。如果你使用的是64位系统,则可以更高。如果你选择的错误,不用担心,如果你在32位系统上要求5g,则Java会抱怨一个无效的值并退出。 正如其他

  • 问题内容: 我对Java有一个基本问题。 当使用默认构造函数声明和初始化时,将创建10个元素的内存空间。现在,当我添加第11个元素时,会发生什么?是否将创建具有20个(或更多)元素容量的新内存空间(这需要将元素从第一个内存位置复制到新位置)或其他东西? 我在这里检查。但是我没有找到答案。 请分享知识。谢谢。 问题答案: 创建一个新数组,并将旧数组的内容复制过来。这就是您在API级别上所知道的。引用

  • 问题内容: 有没有办法我可以在自己的计算机上为jvm设置默认堆大小?我想将其设置为1g,因为我一直在运行自定义程序,这些程序始终会达到默认jvm大小的超额点。 我只是不想记住每次我从命令行运行Java应用程序时都要键入-XmX1g … 必须有一种管理方式来做到这一点吗? 问题答案: 显然,它也可以在Linux上运行: