JXSegmentedView icon indicating copy to clipboard operation
JXSegmentedView copied to clipboard

JXSegmentedTitleImageDataSource (图片在上或者在下的时候宽度计算)

Open lianshuaishuai opened this issue 2 years ago • 3 comments

open override func preferredSegmentedView(_ segmentedView: JXSegmentedView, widthForItemAt index: Int) -> CGFloat {
    var width = super.preferredSegmentedView(segmentedView, widthForItemAt: index)
  
    if itemWidth == JXSegmentedViewAutomaticDimension {
        switch titleImageType {
        case .leftImage, .rightImage:
            width += titleImageSpacing + imageSize.width
        case .topImage, .bottomImage:
            width = max(itemWidth, imageSize.width)
        case .onlyImage:
            width = imageSize.width
        case .onlyTitle:
            break
        }
    }
    return width
}

上面应该取width 不应该用itemWidth

lianshuaishuai avatar Dec 08 '22 06:12 lianshuaishuai

我也遇到了同样的问题,新版本会修复吗 @pujiaxin33

LemonChao avatar Dec 14 '22 07:12 LemonChao

我也遇到了同样的问题,新版本会修复吗 @pujiaxin33

我尝试了继承 JXSegmentedTitleImageDataSource 重写 override func preferredSegmentedView(_ segmentedView: JXSegmentedView, widthForItemAt index: Int) -> CGFloat { var width = itemWidthIncrement if itemWidth == JXSegmentedViewAutomaticDimension { width += (dataSource[index] as! JXSegmentedTitleItemModel).textWidth }else { width += itemWidth }

    if itemWidth == JXSegmentedViewAutomaticDimension {
        switch titleImageType {
        case .leftImage, .rightImage:
            width += titleImageSpacing + imageSize.width
        case .topImage, .bottomImage:
            width = max(width, imageSize.width)
        case .onlyImage:
            width = imageSize.width
        case .onlyTitle:
            break
        }
    }
    return width
}

但是 func segmentedView(_ segmentedView: JXSegmentedView, widthForItemContentAt index: Int) -> CGFloat 无法重写 (使用pod管理的 此方法使用的public) 查看了一下 如果不是一些特定的 例如缩放 获取模型中的宽度等 这个方法不重写 好像也不影响 如果有问题 请指出

lianshuaishuai avatar Dec 19 '22 03:12 lianshuaishuai

我是这样重写的,宽度就正常了

   override func preferredSegmentedView(_ segmentedView: JXSegmentedView, widthForItemAt index: Int) -> CGFloat {
        var width = (dataSource[index] as! JXSegmentedTitleImageItemModel).textWidth
        if itemWidth == JXSegmentedViewAutomaticDimension {
            switch titleImageType {
            case .leftImage, .rightImage:
                width += titleImageSpacing + imageSize.width
            case .topImage, .bottomImage:
                width = max(width, imageSize.width)
            case .onlyImage:
                width = imageSize.width
            case .onlyTitle:
                break
            }
        }
        return width
    }

LemonChao avatar Dec 22 '22 09:12 LemonChao

我是这样重写的,宽度就正常了

   override func preferredSegmentedView(_ segmentedView: JXSegmentedView, widthForItemAt index: Int) -> CGFloat {
        var width = (dataSource[index] as! JXSegmentedTitleImageItemModel).textWidth
        if itemWidth == JXSegmentedViewAutomaticDimension {
            switch titleImageType {
            case .leftImage, .rightImage:
                width += titleImageSpacing + imageSize.width
            case .topImage, .bottomImage:
                width = max(width, imageSize.width)
            case .onlyImage:
                width = imageSize.width
            case .onlyTitle:
                break
            }
        }
        return width
    }

已参考,修复。

pujiaxin33 avatar Jul 09 '24 06:07 pujiaxin33