如何调整文本(字体)大小以适合 UISegmentedControl 的 UISegment?

2023-11-25

有什么方法可以减小可以适合单段的字体大小UISegmentedControl ?

尝试过很多类似的事情,

[[UILabel appearanceWhenContainedIn:[UISegmentedControl class], nil] adjustsFontSizeToFitWidth];

[[UILabel appearanceWhenContainedIn:[UISegmentedControl class], nil] setMinimumScaleFactor:0.5];

AND

 NSArray *arr = segment.subviews;  // segment is UISegmentedControl object

for (int i = 0; i < arr.count; i++) {

    UIView *aSegment = [arr objectAtIndex:i];

    for (UILabel *label in aSegment.subviews) {

        if ([label isKindOfClass:[UILabel class]]) {

            UILabel *myLabel = (UILabel *)label;

            [myLabel setNumberOfLines:0];

            label.numberOfLines = 0;
            label.adjustsFontSizeToFitWidth = YES;
            label.minimumScaleFactor = 0.5;
        }



    }
}

能够设置段标签的行数,例如,

  [[UILabel appearanceWhenContainedIn:[UISegmentedControl class], nil] setNumberOfLines:0];

可以根据内容设置单个段大小,例如,

  segment.apportionsSegmentWidthsByContent = YES;

但在这种情况下,每个段都有不同的大小。

我想保持每个段的大小相同,并希望减小适合的字体大小UISegmentLabel (label) of UISegmentedControl就像是minimumscalefactor or minimumfontsize or adjustsFontSizeToFitWidth。当包含在中时,这些属性不适用于标签UISegmentedControl.

如果有人可以帮助实现这一目标,我们将不胜感激!

提前致谢!!


我发现了问题,实际上是我的错误!我正在设置numberOfLines,adjustsFontSizeToFitWidth,minimumScaleFactor and TitleTextAttributes一起。如果我们设置titleTextAttribute then minimumScaleFactor无法工作。

Update :(正如 @HawkEye1194 在另一个答案的评论中所问的)

我最终得到了以下解决方案,

 //this will allow multiple lines in label contained by every segment in segmentedcontroller

[[UILabel appearanceWhenContainedIn:[UISegmentedControl class], nil] setNumberOfLines:0];


UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:option];
segment.frame = CGRectMake(20, 50, self.view.frame.size.width - 40, 50);
segment.tintColor = [UIColor grayColor];
segment.selectedSegmentIndex = 0;
segment.backgroundColor = [UIColor whiteColor];
segment.tag = segmentedControllerBaseTag;


[segment addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged];

[segment setTitleTextAttributes:@{NSFontAttributeName :[UIFont fontWithName:@"HelveticaNeue" size:17.0], NSForegroundColorAttributeName : [UIColor darkGrayColor] } forState:UIControlStateNormal];
[segment setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:17.0],NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateSelected];

如果您没有像上面那样设置标题文本属性,那么您可以使用下面的代码

// ********** if titletextattributes are not set then below method works ***********

   for(uint i=0;i<[segment subviews].count;i++)
   {
    for(UIView *view in [[[segment subviews] objectAtIndex:i] subviews])
    {
        if([view isKindOfClass:[UILabel class]])
        {

            [(UILabel*)view setNumberOfLines:0];
            [(UILabel*)view setAdjustsFontSizeToFitWidth:YES];
            [(UILabel*)view setMinimumScaleFactor:0.7];


        }
    }
}

您可以通过以下代码根据其内容调整单个段的大小,

 //*************** adjust single segment size as per content

 segment.apportionsSegmentWidthsByContent = YES;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调整文本(字体)大小以适合 UISegmentedControl 的 UISegment? 的相关文章

随机推荐