根据控件的宽度缩放UISegmentedControl标签

这似乎是一个没有脑子,但我找不到任何方式来做到这一点。 基本上我所拥有的是使用NSLocalizedString两个本地化标签的UISegmentedControl 。 我已经设置了字体大小,并且英文和其他几种语言的内容都很棒。 但是,在日文和其他语言中,字符较大,导致标签被截断。

在这里输入图像说明

 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属性。

我正在处理同样的问题。 这是我的解决scheme(边缘有点粗糙):

我inheritance分割的控件,然后在我的子类中,执行以下操作。 希望这可以帮助! (在iOS 7和8上testing)

 + (void)setSublabelScale:(UIView *)view { for (id subview in view.subviews) { if ([subview isKindOfClass:[UILabel class]]) { [subview setMinimumScaleFactor:0.5]; [subview setAdjustsFontSizeToFitWidth:YES]; } else { [MYSegmentedControl setSublabelScale:subview]; } } } - (void)layoutSubviews { [super layoutSubviews]; [MYSegmentedControl setSublabelScale:self]; } 

我发现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; }