Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ class JXSegmentedMixcellDataSource: JXSegmentedBaseDataSource {
numberModel.numberString = "33"
numberModel.numberWidthIncrement = 10
dataSource.append(numberModel)

let minimumWidthNumberModel = JXSegmentedNumberItemModel()
minimumWidthNumberModel.title = "最小宽度数字"
minimumWidthNumberModel.number = 9
minimumWidthNumberModel.numberString = "9"
minimumWidthNumberModel.numberMinimumWidth = 14
dataSource.append(minimumWidthNumberModel)

let dotModel = JXSegmentedDotItemModel()
dotModel.title = "红点"
Expand Down
6 changes: 6 additions & 0 deletions Sources/Dot/JXSegmentedDotCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ open class JXSegmentedDotCell: JXSegmentedTitleCell {
}

dotView.center = CGPoint(x: titleLabel.frame.maxX + myItemModel.dotOffset.x, y: titleLabel.frame.minY + myItemModel.dotOffset.y)

/// fix issue #167: 标题 只有小红点的话,显示的时候红点🔴会有被切掉的感觉,不是圆形展示
/// 原因:iOS设备的屏幕分辨率通常使用整数像素来进行渲染。带有小数点的坐标可能导致视图位置的像素对齐不精确,尤其是在某些较低分辨率的屏幕上,可能会导致视图边缘不平整,圆角部分被切割掉。
/// 解决方案:起始点取整
dotView.frame.origin.x = round(dotView.frame.origin.x)
dotView.frame.origin.y = round(dotView.frame.origin.y)
}

open override func reloadData(itemModel: JXSegmentedBaseItemModel, selectedType: JXSegmentedViewItemSelectedType) {
Expand Down
9 changes: 8 additions & 1 deletion Sources/Number/JXSegmentedNumberCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,16 @@ open class JXSegmentedNumberCell: JXSegmentedTitleCell {

numberLabel.sizeToFit()
let height = myItemModel.numberHeight
/// fix issue #167: JXSegmentedNumberDataSource 当number为1234567890一位数字宽度不一致时,小红点不是圆形
/// 解决方案:新增红点的最小宽度属性,就保证一位数的红点是圆的
let width = max(myItemModel.numberMinimumWidth, numberLabel.bounds.size.width + myItemModel.numberWidthIncrement)
numberLabel.layer.cornerRadius = height/2
numberLabel.bounds.size = CGSize(width: numberLabel.bounds.size.width + myItemModel.numberWidthIncrement, height: height)
numberLabel.bounds.size = CGSize(width: width, height: height)
numberLabel.center = CGPoint(x: titleLabel.frame.maxX + myItemModel.numberOffset.x, y: titleLabel.frame.minY + myItemModel.numberOffset.y)

/// fix: iOS设备的屏幕分辨率通常使用整数像素来进行渲染。带有小数点的坐标可能导致视图位置的像素对齐不精确,尤其是在某些较低分辨率的屏幕上,可能会导致视图边缘不平整,圆角部分被切割掉。
numberLabel.frame.origin.x = round(numberLabel.frame.origin.x)
numberLabel.frame.origin.y = round(numberLabel.frame.origin.y)
}

open override func reloadData(itemModel: JXSegmentedBaseItemModel, selectedType: JXSegmentedViewItemSelectedType) {
Expand Down
3 changes: 3 additions & 0 deletions Sources/Number/JXSegmentedNumberDataSource.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ open class JXSegmentedNumberDataSource: JXSegmentedTitleDataSource {
open var numberStringFormatterClosure: ((Int) -> String)?
/// numberLabel的高度,默认:14
open var numberHeight: CGFloat = 14
/// numberLabel的最小宽度,默认:0
open var numberMinimumWidth: CGFloat = 0

open override func preferredItemModelInstance() -> JXSegmentedBaseItemModel {
return JXSegmentedNumberItemModel()
Expand All @@ -49,6 +51,7 @@ open class JXSegmentedNumberDataSource: JXSegmentedTitleDataSource {
itemModel.numberOffset = numberOffset
itemModel.numberWidthIncrement = numberWidthIncrement
itemModel.numberHeight = numberHeight
itemModel.numberMinimumWidth = numberMinimumWidth
itemModel.numberFont = numberFont
}

Expand Down
1 change: 1 addition & 0 deletions Sources/Number/JXSegmentedNumberItemModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ open class JXSegmentedNumberItemModel: JXSegmentedTitleItemModel {
open var numberBackgroundColor: UIColor = .red
open var numberTextColor: UIColor = .white
open var numberWidthIncrement: CGFloat = 0
open var numberMinimumWidth: CGFloat = 0
open var numberFont: UIFont = UIFont.systemFont(ofSize: 11)
open var numberOffset: CGPoint = CGPoint.zero
open var numberHeight: CGFloat = 14
Expand Down