pujiaxin33/JXSegmentedView

JXSegmentedTitleDataSource,textWidth,itemWidth,itemWidthIncrement 生效,但是标题漏出,导致覆盖问题

Open

#199 aperta il 9 feb 2022

Vedi su GitHub
 (0 commenti) (0 reazioni) (0 assegnatari)Swift (419 fork)github user discovery
help wanted

Metriche repository

Star
 (2883 star)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

lib_addr: https://github.com/pujiaxin33/JXSegmentedView lib_version: 1.3.0,1.2.5 iOS 15.2 iPhone7

itemWidth,itemWidthIncrement 生效或定制化问题,UILabel标题漏出,导致覆盖

解决参考:

class MyCustomTabTitleDataSource: JXSegmentedTitleDataSource{
    open override func registerCellClass(in segmentedView: JXSegmentedView) {
        segmentedView.collectionView.register(MyCustomTabTitleCell.self, forCellWithReuseIdentifier: "cell")
    }
}

class MyCustomTabTitleCell: JXSegmentedTitleCell {
    
    open override func layoutSubviews() {
        super.layoutSubviews()

        guard let myItemModel = itemModel as? JXSegmentedTitleItemModel else {
            return
        }
        
        let labelSize = titleLabel.sizeThatFits(self.contentView.bounds.size)
        var labelBounds = CGRect(x: 0, y: 0, width: labelSize.width, height: labelSize.height)
        
        // 增加以下一句,可限制UILabel 漏出或撑出UICollectionViewCell 问题
        	  //  dataSource 中的 widthForTitleClosure 或 open func widthForTitle(_ title: String) -> CGFloat 会生效
        labelBounds.size.width = myItemModel.textWidth
        
        titleLabel.bounds = labelBounds
        titleLabel.center = contentView.center

        maskTitleLabel.bounds = labelBounds
        maskTitleLabel.center = contentView.center
    }
}

参考代码:

let segmentView = JXSegmentedView()
segmentView.delegate = self
let dataSource = MyCustomTabTitleDataSource()
dataSource.titles = ["很长很长的标题/很长很长的标题/很长很长的标题","不是很长的标题"]
dataSource.widthForTitleClosure = {[weak self] ( aString) -> CGFloat in
    // print("aString:\(aString)")
    return (UIScreen.main.bounds / CGFloat(2))
}
segmentView.dataSource = dataSource

Guida contributor