Reputation: 483
I have a simple segment control in which I put images for highlighted and normal state.
I set the frame of segment control so it fits the images perfectly. It works absolutely fine until in iOS 6. It shows unexpected behaviour, it changes the segment control height to the required height but the width remains unchanged. The image is smaller than segment, so it needs adjustment either in the image size or segment control property.
Here is the following code:
- (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];
}
I don't understand if it works fine in previous iOS versions, why this behaviour in iOS 6. Which other controls behave unexpectedly in iOS 6?
Upvotes: 1
Views: 1117
Reputation: 149
In .h
file:
IBOutlet UISegmentedControl *segmentCont;
In .m
file, set segment Array.
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];
}
Upvotes: 0
Reputation: 483
I solved this problem using wider image also. But a neater approach I found was :
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];}
I did a version check as in iOS 4.3 simulator, it is not allowed, as this method can be used in iOS 5 or later. I did width - 1.5 to image size as I am not using any divider image and it was showing a gap between the two segments. I would still like to know if anyone has a another approach or answer why it is behaving different in iOS 6.
Upvotes: 1