我有一个简单的段控件,我将图像置于高亮和正常状态 我设置了分段控制的框架,使其完美地适合图像。它在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中哪些其他控件出乎意料?
答案 0 :(得分: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中表现不同。
答案 1 :(得分: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];
}