具有差异文本大小的uisegment控制

时间:2016-09-22 02:08:10

标签: ios objective-c uisegmentedcontrol

我一直在尝试自定义UISegmentControl,如下所示:

enter image description here

首先,我遍历UISegmentControl中的标签并将每个标签设置为多行,但是当我尝试更改标签文本属性时,它不会更改字体。我尝试在普通UILabel上使用此属性,但它可以工作,但不在uisegment中

[segmentedControl.subviews enumerateObjectsUsingBlock:^(UIView * obj, NSUInteger idx, BOOL *stop) {
        [obj.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            if ([obj isKindOfClass:[UILabel class]]) {
               //Multiline
                UILabel *_tempLabel = (UILabel *)obj;
                [_tempLabel setNumberOfLines:0];

                 NSMutableAttributedString *attString = 
                          [[NSMutableAttributedString alloc]
                                    initWithString: @"monkey goat"];

 [attString addAttribute: NSForegroundColorAttributeName
              value: [UIColor redColor]
              range: NSMakeRange(0,6)];


 [attString addAttribute: NSFontAttributeName
              value:  [UIFont fontWithName:@"Helvetica" size:15]
              range: NSMakeRange(0,6)];

 [attString addAttribute: NSFontAttributeName
              value:  [UIFont fontWithName:@"Didot" size:24]
              range: NSMakeRange(7,4)];

 _tempLabel.attributedText  = attString;
            }
        }];
    }];

结果如下:

enter image description here

更改附加到视图的标签属性:

  NSMutableAttributedString *attString = 
                          [[NSMutableAttributedString alloc]
                                    initWithString: @"monkey goat"];

 [attString addAttribute: NSForegroundColorAttributeName
              value: [UIColor redColor]
              range: NSMakeRange(0,6)];


 [attString addAttribute: NSFontAttributeName
              value:  [UIFont fontWithName:@"Helvetica" size:15]
              range: NSMakeRange(0,6)];

 [attString addAttribute: NSFontAttributeName
              value:  [UIFont fontWithName:@"Didot" size:24]
              range: NSMakeRange(7,4)];

 self.label.attributedText  = attString;

SO链接更改标签属性:Different font size in the same label?

2 个答案:

答案 0 :(得分:1)

UISegmentedControl不支持您要执行的操作。 API仅支持使用' setTitleTextAttributes:forState:`方法为所有片段标题设置单一字体。

最终,分段控件将重置您在挖掘私有子视图后可能设置的任何属性。打击API并不是一个好主意,也不是一个深入了解视图的无证子视图的好主意。这些解决方案有时可能有效,但大多数注定要在未来的iOS更新可用时中断。

您唯一的选择是创建自己的自定义控件,执行您想要的操作或找到其他人创建的控件。

答案 1 :(得分:1)

不要这样做。分段控制旨在按原样使用。它的内部视图层次结构是私有的,并且可以在OS版本之间进行更改。通过进入控制区内并且四处乱窜,所有投注均已关闭。即使你今天使用它,任何未来的操作系统版本都可能会让你失望。

如果您想自定义分段控件,请从头开始构建。这不难。事实上,它可能比你尝试做的更容易,当然也更安全。