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 コントロールの各セグメントには 2 行のテキストがあり、必要な場所に改行があります。
ただし、回転時には、セグメント化されたコントロールを全幅に保ちたいと思います。その幅のセグメントでは、改行がばかげて見えます。そのため、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×
20mm」
これは、上記の強制的な numberOfLines = 2 を、最初に UISegmentedControl を設定したときに機能した numberOfLines = 0 に置き換えると得られるものです。
私が望むのは、コントロールを作成したときに得られるものです。
「実寸:
700c×20mm」
しかし、私が何を試しても (文字列と numberOfLines コードを willRotateToInterfaceOrientation または didRotateFromInterfaceOrientation に入れる; テキストを変更する前に UISegmentedControl のフレームを再設定する; テキストを変更した後にフレームを再設定する...)、できます。素敵できちんとした 2 行のラベルが戻ってきません。ここで何が欠けていますか?