1

強調表示された状態と通常の状態の画像を配置する単純なセグメント コントロールがあります。
画像にぴったり合うように、セグメント コントロールのフレームを設定しました。iOS 6 まではまったく問題なく動作します。予期しない動作を示し、セグメント コントロールの高さを必要な高さに変更しますが、幅は変更されません。画像はセグメントよりも小さいため、画像サイズまたはセグメント制御プロパティのいずれかで調整が必要です。

次のコードは次のとおりです。

- (void)initTitleControl:(id)delegate {
    UIImage *leftImage;
    UIImage *rightImage;
    UIImage *leftImageText = [GBImageManager drawTextOnImage:leftImage color:UIColorFromRGB(0xffffff) text:@"List"];
    UIImage *rightImageText = [GBImageManager drawTextOnImage:rightImage color:UIColorFromRGB(0x076aac) text:@"Map"];
    UISegmentedControl *segmentControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:leftImageText, rightImageText, nil]];

    [segmentControl setSelectedSegmentIndex:0];
    [segmentControl setTintColor:UIColorFromRGB(0x076aac)];
    [segmentControl setSegmentedControlStyle:UISegmentedControlStyleBar];
    [segmentControl setMomentary:YES];
    CGRect frame = CGRectMake(0, 0, 105, 32);
    [segmentControl setFrame:frame];    
    [segmentControl addTarget:self action:@selector(onSegmentedChanged:) forControlEvents:UIControlEventValueChanged];

    self.navigationItem.titleView = segmentControl;
    [delegate setSegmentedControl:segmentControl];
}

以前の iOS バージョンで正常に動作するかどうか、なぜ iOS 6 でこの動作が行われるのかわかりません。iOS 6 で予期しない動作をする他のコントロールはどれですか?

4

2 に答える 2

1

より広い画像も使用してこの問題を解決しました。しかし、私が見つけたよりきちんとしたアプローチは次のとおりです。

 float version = [[[UIDevice currentDevice] systemVersion] floatValue];
 if (version >= 6.0) {
[[UISegmentedControl appearance] setWidth:leftImage.size.width -1.5 forSegmentAtIndex:0];
[[UISegmentedControl appearance] setWidth:rightImage.size.width -1.5 forSegmentAtIndex:1];}

iOS 4.3 シミュレーターのようにバージョン チェックを行いましたが、この方法は iOS 5 以降で使用できるため、許可されていません。分割画像を使用しておらず、2 つのセグメント間にギャップが表示されていたため、幅 - 1.5 を画像サイズに設定しました。誰かが別のアプローチを持っているかどうか、または iOS 6 での動作が異なる理由を知りたいです。

于 2012-10-11T10:14:00.543 に答える
0

ファイル.h内:

IBOutlet UISegmentedControl *segmentCont;

ファイルで、.mセグメント配列を設定します。

noArray=@[@"OneDay",@"20-20",@"Test"];

segmentCont=[[UISegmentedControl alloc] initWithItems:noArray];
    segmentCont.segmentedControlStyle = UISegmentedControlStyleBar;

    segmentCont.selectedSegmentIndex = 0;
    lbl1.text=[noArray objectAtIndex:0];
    [segmentCont addTarget:self action:@selector(Select_Value:) forControlEvents:UIControlEventValueChanged];

// Segment Control
-(void)Select_Value:(id)sender{

    UISegmentedControl *segmentedControl2 = (UISegmentedControl *)sender;
    lbl1.text=[segmentedControl2 titleForSegmentAtIndex: [segmentedControl2 selectedSegmentIndex]];// intValue];

}
于 2013-04-29T12:05:27.077 に答える