pujiaxin33 / JXSegmentedView

A powerful and easy to use segmented view (segmentedcontrol, pagingview, pagerview, pagecontrol, categoryview) (腾讯新闻、今日头条、QQ音乐、网易云音乐、京东、爱奇艺、腾讯视频、淘宝、天猫、简书、微博等所有主流APP分类切换滚动视图)
MIT License
2.68k stars 369 forks source link

JXSegmentedView的指示器不显示 #158

Closed xiaoyao20084321 closed 1 month ago

xiaoyao20084321 commented 3 years ago

JXSegmentedView添加到view上, 如果这个view需要做高度动画, 所以这个view一开始需要给一个高度为0, 然后在动画慢慢变大, 如果这样做的话,JXSegmentedView还会出现,但是 JXSegmentedView的指示器就不显示了

目前解决办法先给一个初始高度 image 求解决

pujiaxin33 commented 1 month ago

因为目前indicator初始化的时候,根据collectionview的contentSize进行了布局,所以要初始化的时候有对应正确的contentSize值。 参考以下代码:

        for indicator in indicators {
            if itemDataSource.isEmpty {
                indicator.isHidden = true
            }else {
                indicator.isHidden = false
                let selectedItemFrame = getItemFrameAt(index: selectedIndex)
                let indicatorParams = JXSegmentedIndicatorSelectedParams(currentSelectedIndex: selectedIndex,
                                                                         currentSelectedItemFrame: selectedItemFrame,
                                                                         selectedType: .unknown,
                                                                         currentItemContentWidth: dataSource?.segmentedView(self, widthForItemContentAt: selectedIndex) ?? 0,
                                                                         collectionViewContentSize: CGSize(width: totalContentWidth, height: bounds.size.height))
                indicator.refreshIndicatorState(model: indicatorParams)

                if indicator.isIndicatorConvertToItemFrameEnabled {
                    var indicatorConvertToItemFrame = indicator.frame
                    indicatorConvertToItemFrame.origin.x -= selectedItemFrame.origin.x
                    itemDataSource[selectedIndex].indicatorConvertToItemFrame = indicatorConvertToItemFrame
                }
            }
        }