根据控件的宽度缩放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; }