pujiaxin33/JXSegmentedView

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

Open

#199 opened on Feb 9, 2022

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Swift (419 forks)github user discovery
help wanted

Repository metrics

Stars
 (2,883 stars)
PR merge metrics
 (PR metrics pending)

Description

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

Contributor guide