[objective-c]基于控件的宽度的规模 UISegmentedControl 标签

发布时间: 2016/10/2 3:12:09
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

这看起来似乎没有脑子,但我找不到任何的方式做到这一点。基本上我有的是 UISegmentedControl 与两个本地化标签使用 NSLocalizedString 。我已经设置的字体大小,一切看起来伟大在英语和其他几种语言。但是,在日本和其他语言的字符更大,造成标签会被截断。

enter image description here

self.segmentedControl = [[UISegmentedControl alloc] initWithItems:
                             [NSArray arrayWithObjects:
                              NSLocalizedString(@"Miles", nil).uppercaseString,
                              NSLocalizedString(@"Kilometers", nil).uppercaseString,
                              nil]];
self.segmentedControl.apportionsSegmentWidthsByContent = YES;
self.segmentedControl.selectedSegmentIndex = self.metric ? 1 : 0;
[self.segmentedControl addTarget:self action:@selector(changeMetric:) forControlEvents:UIControlEventValueChanged];
self.segmentedControl.frame = CGRectMake(8, middleHolder.frame.size.height/2+60, progressWidth, 30);
self.segmentedControl.center = CGPointMake(self.view.center.x, self.segmentedControl.center.y);
[self.segmentedControl setTitleTextAttributes:@{
                                                    NSForegroundColorAttributeName: [UIColor whiteColor],
                                                    NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:36]
                                                    } forState:UIControlStateSelected];
[self.segmentedControl setTitleTextAttributes:@{
                                                    NSForegroundColorAttributeName: [[UIColor whiteColor] colorWithAlphaComponent:0.3],
                                                    NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:36]
                                                    } forState:UIControlStateNormal];
self.segmentedControl.tintColor = [UIColor clearColor];
self.segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[middleHolder addSubview:self.segmentedControl];

有没有任何方法规模取决于标签宽度标签的字体大小?我意识到这些是不正常 UILabel 的所以并没有 adjustsFontSizeToFitWidth 属性。

解决方法 1:

我发现, NSAttributedString 具有 size 属性设置为它,那会让我知道每个本地文本有多宽。所以,我可以只是这样做︰

CGFloat fontSize = 36;
NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:NSLocalizedString(@"Kilometers", nil).uppercaseString attributes:@{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue-UltraLight" size:fontSize]}];
if (attributedString.size.width > 200) {
    fontSize = 30;
}
官方微信
官方QQ群
31647020