2012-10-01 55 views
1

我有一个简单的段控制,其中我把图像为高亮和正常状态。
我设置了段控制的框架,以便它完美地适合图像。它在iOS 6中工作得很好。它显示出意外的行为,它将段控制高度更改为所需的高度,但宽度保持不变。图像比分段小,因此需要调整图像大小或分段控制属性。段控制宽度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中意外行为?

回答

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中或以后使用。 因为我没有使用任何分隔图像,所以我在图像大小上做了-1.5的宽度,并且它显示了两段之间的差距。我还是想知道如果任何人有另一种方法或回答为什么它在iOS的6

0

行为不同在.h文件:

IBOutlet UISegmentedControl *segmentCont; 

.m文件中的段阵列。

[email protected][@"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]; 

}