pujiaxin33/JXSegmentedView
View on GitHubJXSegmentedTitleDataSource,textWidth,itemWidth,itemWidthIncrement 生效,但是标题漏出,导致覆盖问题
Open
#199 opened on Feb 9, 2022
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