尽我所能,我无法解决 iOS7 iPhone 应用程序的 UISegmentedControl 错误。
创建分段控件时,我使用以下代码:
NSArray *segmentedControlItemArray = [NSArray arrayWithObjects: @"Nominal:\n27 inch", @"Actual:\n700c x 23mm", @"Actual:\n700c x 20mm", nil];
_wheelDiameterSegmentedControl = [[UISegmentedControl alloc] initWithItems:segmentedControlItemArray];
_wheelDiameterSegmentedControl.frame = CGRectMake(0, 102, 290, 50);
_wheelDiameterSegmentedControl.selectedSegmentIndex = 0;
_wheelDiameterSegmentedControl.tintColor = [UIColor colorWithRed:0.35 green:0.4 blue:0.9 alpha:1.0];
for (id segment in [_wheelDiameterSegmentedControl subviews]) {
for (id label in [segment subviews]) {
if ([label isKindOfClass:[UILabel class]]) {
UILabel *titleLabel = (UILabel *) label;
titleLabel.numberOfLines = 0;
}
}
}
[_wheelDiameterSegmentedControl addTarget:self
action:@selector(pickOne:)
forControlEvents:UIControlEventValueChanged];
[_wheelDiameterMenuContainer addSubview:_wheelDiameterSegmentedControl];
遗憾的是,我不能发布图片,或者我会向您展示我想要的控件的图片:UISegmented 控件中的每个段都有两行文本,在我要求的地方有一个换行符。
不过,在旋转时,我想保持分段控件全宽,并且在这么宽的段中换行符看起来很傻。因此,在 willAnimateRotationToInterfaceOrientation 中,我包含了以下代码,字符串中没有换行符:
[_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 450, 50)];
[_wheelDiameterSegmentedControl setTitle:@"Nominal: 27 inch" forSegmentAtIndex:0];
[_wheelDiameterSegmentedControl setTitle:@"Actual: 700c x 23mm" forSegmentAtIndex:1];
[_wheelDiameterSegmentedControl setTitle:@"Actual: 700c x 20mm" forSegmentAtIndex:2];
再一次,如果我可以插入图像,我会向您展示我想要的图像:一个宽 UISegmented 控件,标签中没有换行符(每个标签 1 行文本)。
这就是我遇到麻烦的地方。当我旋转回纵向时,我的选择似乎是:
1 行标签文本,截断,格式为
“实际:7……”
当我只是使用重置 UISegmentedControl 的大小时
[_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 290, 50)];
2 行标签文本,截断,格式为
“实际:
700c x ...”
当我重置大小并重置字符串值并重新运行将标签的 numberOfLines 设置为 2 的代码循环时,使用
NSArray *segmentedControlItemArray = [NSArray arrayWithObjects: @"Nominal:\n27 inch", @"Actual:\n700c x 23mm", @"Actual:\n700c x 20mm", nil];
[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:0] forSegmentAtIndex:0];
[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:1] forSegmentAtIndex:1];
[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:2] forSegmentAtIndex:2];
for (id segment in [_wheelDiameterSegmentedControl subviews]) {
for (id label in [segment subviews]) {
if ([label isKindOfClass:[UILabel class]]) {
UILabel *titleLabel = (UILabel *) label;
titleLabel.numberOfLines = 2;
}
}
}
[_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 290, 50)];
3行标签文本,格式为
“实际:
700c x
20mm”
这就是当我将上面的强制 numberOfLines = 2 替换为首先设置 UISegmentedControl 时起作用的 numberOfLines = 0 时得到的。
我想要的是我在创建控件时得到的,即
“实际:
700c x 20mm”
但无论我尝试了什么(将字符串和 numberOfLines 代码放入 willRotateToInterfaceOrientation 或 didRotateFromInterfaceOrientation;在更改文本之前重新设置 UISegmentedControl 的框架;在更改文本后重新设置框架......),我可以'拿不回我漂亮、整洁的两行标签。我在这里想念什么?