@@ -516,21 +516,18 @@ - (void)layoutItemViews
516516 UIView *itemView = item.itemView ;
517517 [self .trackView addSubview: itemView];
518518
519- // Size to fit
520- [itemView sizeToFit ];
521-
522- // Make sure they are all unselected
523- [self setItemAtIndex: i selected: NO ];
524-
525519 // Lay out the frame
526520 CGRect thumbFrame = [self frameForSegmentAtIndex: i];
527521 itemView.center = (CGPoint){CGRectGetMidX (thumbFrame),
528522 CGRectGetMidY (thumbFrame)};
529523 itemView.frame = CGRectIntegral (itemView.frame );
530524
525+ // Make sure they are all unselected
526+ [self setItemAtIndex: i selected: NO ];
527+
531528 // If the item is disabled, make it faded
532529 if (!self.enabled || item.isDisabled ) {
533- itemView.alpha = kTOSegmentedControlDisabledAlpha ;
530+ itemView.alpha = kTOSegmentedControlDisabledAlpha ;
534531 }
535532
536533 i++;
@@ -686,7 +683,6 @@ - (void)setItemAtIndex:(NSInteger)index selected:(BOOL)selected
686683
687684 // Tell the segment to select itself in order to show the reversible arrow
688685 TOSegmentedControlSegment *segment = self.segments [index];
689- if (segment.isSelected == selected) { return ; }
690686
691687 // Update the segment state
692688 segment.isSelected = selected;
@@ -699,37 +695,15 @@ - (void)setItemAtIndex:(NSInteger)index selected:(BOOL)selected
699695 UILabel *label = segment.label ;
700696 if (label == nil ) { return ; }
701697
702- [UIView performWithoutAnimation: ^{
703- // Capture its current position and scale
704- CGPoint center = label.center ;
705- CGAffineTransform transform = label.transform ;
706-
707- // Reset its transform so we don't mangle the frame
708- label.transform = CGAffineTransformIdentity;
709-
710- // Set the font
711- UIFont *font = selected ? self.selectedTextFont : self.textFont ;
712- label.font = font;
698+ // Set the font
699+ UIFont *font = selected ? self.selectedTextFont : self.textFont ;
700+ label.font = font;
713701
714- // Resize the frame in case the new font exceeded the bounds
715- [label sizeToFit ];
716- label.frame = CGRectIntegral (label.frame );
702+ // Re-apply the arrow image view to the translated frame
703+ segment.arrowView .frame = [self frameForImageArrowViewWithItemFrame: label.frame];
717704
718- // Re-apply the arrow image view to the translated frame
719- if (selected) {
720- CGAffineTransform transform = segment.arrowView .transform ;
721- segment.arrowView .transform = CGAffineTransformIdentity;
722- segment.arrowView .frame = [self frameForImageArrowViewWithItemFrame: label.frame];
723- segment.arrowView .transform = transform;
724- }
725-
726- // Ensure the arrow view is set to the right orientation
727- [segment setArrowImageReversed: segment.isReversed];
728-
729- // Re-apply the transform and the positioning
730- label.transform = transform;
731- label.center = center;
732- }];
705+ // Ensure the arrow view is set to the right orientation
706+ [segment setArrowImageReversed: segment.isReversed];
733707}
734708
735709- (void )setItemAtIndex : (NSInteger )index faded : (BOOL )faded
@@ -1262,6 +1236,11 @@ - (void)setSelectedTextFont:(UIFont *)selectedTextFont
12621236 if (_selectedTextFont == nil ) {
12631237 _selectedTextFont = [UIFont systemFontOfSize: 13 .0f weight: UIFontWeightSemibold];
12641238 }
1239+
1240+ // Set each item to adopt the new font
1241+ for (TOSegmentedControlSegment *item in self.segments ) {
1242+ [item refreshItemView ];
1243+ }
12651244}
12661245
12671246// -----------------------------------------------
0 commit comments