我在 Storyboard 中将 UISegmentedControl 的高度设置为一个常量。当我运行该应用程序时 - 它看起来不错,而且是我想要的样子。但是,只要我选择一个段(任何人),UiSegmentedControl 就会将其高度更改为默认高度。如果我再次选择当前索引几次,它会返回到我设置的高度。
有人能告诉我这是怎么回事吗?
谢谢!
编辑一些代码:
此方法从 viewDidLoad
调用
-(void)setupSegmented
{
self.segmentedControl.tintColor = [UIColor clearColor];
if ([UIImage instancesRespondToSelector:@selector(imageWithRenderingMode:)]) {
/* For non Selected Segments */
self.allInactive = [[UIImage imageNamed:@"Segment All"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.auctionInactive = [[UIImage imageNamed:@"Segment Auction"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.buyNowInactive = [[UIImage imageNamed:@"Segment Buy Now"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.classifiedInactive = [[UIImage imageNamed:@"Segment Classified"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
/*For selected Segments */
self.allActive = [[UIImage imageNamed:@"Segment All Active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.auctionActive = [[UIImage imageNamed:@"Segment Auction Active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.buyNowActive = [[UIImage imageNamed:@"Segment Buy Now Active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
self.classifiedActive = [[UIImage imageNamed:@"Segment Classified Active"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
[self.segmentedControl setImage:self.allInactive forSegmentAtIndex:0];
[self.segmentedControl setImage:self.auctionInactive forSegmentAtIndex:1];
[self.segmentedControl setImage:self.buyNowInactive forSegmentAtIndex:2];
[self.segmentedControl setImage:self.classifiedInactive forSegmentAtIndex:3];
}
因此当我点击一个片段时调用方法:
- (IBAction)segmentedControlSelected:(UISegmentedControl *)sender {
switch (sender.selectedSegmentIndex){
case 0:
{
self.tradeType = @"UNSPECIFIED";
[self.segmentedControl setImage:self.allActive forSegmentAtIndex:sender.selectedSegmentIndex];
[self.segmentedControl setImage:self.auctionInactive forSegmentAtIndex:1];
[self.segmentedControl setImage:self.buyNowInactive forSegmentAtIndex:2];
[self.segmentedControl setImage:self.classifiedInactive forSegmentAtIndex:3];
break;
}
case 1:
{
self.tradeType = @"ENGLISH_AUCTION";
[self.segmentedControl setImage:self.auctionActive forSegmentAtIndex:sender.selectedSegmentIndex];
[self.segmentedControl setImage:self.allInactive forSegmentAtIndex:0];
[self.segmentedControl setImage:self.buyNowInactive forSegmentAtIndex:2];
[self.segmentedControl setImage:self.classifiedInactive forSegmentAtIndex:3];
break;
}
case 2:
{
self.tradeType = @"FIXED_PRICE";
[self.segmentedControl setImage:self.buyNowActive forSegmentAtIndex:sender.selectedSegmentIndex];
[self.segmentedControl setImage:self.allInactive forSegmentAtIndex:0];
[self.segmentedControl setImage:self.auctionInactive forSegmentAtIndex:1];
[self.segmentedControl setImage:self.classifiedInactive forSegmentAtIndex:3];
break;
}
case 3:
{
self.tradeType = @"CLASSIFIED_CONTACT";
[self.segmentedControl setImage:self.classifiedActive forSegmentAtIndex:sender.selectedSegmentIndex];
[self.segmentedControl setImage:self.allInactive forSegmentAtIndex:0];
[self.segmentedControl setImage:self.auctionInactive forSegmentAtIndex:1];
[self.segmentedControl setImage:self.buyNowInactive forSegmentAtIndex:2];
break;
}
}
}
最佳答案
我在这个 SO 答案中找到了解决方案:Change Height of UISegmentedControl
每次点击 UISegmentedControl
时,我都必须在 -(void)viewDidLayoutSubViews
中强制设置新的高度。
关于ios - UISegmentedControll 在选择段时更改高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22987176/