Ios UI分段控制、右按钮和旋转问题

Ios UI分段控制、右按钮和旋转问题,ios,iphone,uisegmentedcontrol,uinavigationitem,rightbarbuttonitem,Ios,Iphone,Uisegmentedcontrol,Uinavigationitem,Rightbarbuttonitem,我试图在某种程度上重现iOS 7和iOS 8上Mail.app上显示的上下箭头。没什么大不了的。我只是在UIBarButtonItem中插入一个UISegmentedControl,如下所示,如果您知道复制该UI的更好方法,请告诉我: UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:@[[UIImage imageNamed:@"ArrowDown"], [UIImage image

我试图在某种程度上重现iOS 7和iOS 8上Mail.app上显示的上下箭头。没什么大不了的。我只是在UIBarButtonItem中插入一个UISegmentedControl,如下所示,如果您知道复制该UI的更好方法,请告诉我:

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:@[[UIImage imageNamed:@"ArrowDown"], [UIImage imageNamed:@"ArrowUp"]]];
[segmentedControl addTarget:self action:@selector(segmentedAction:) forControlEvents:UIControlEventValueChanged];
[segmentedControl setBackgroundImage:[[UIImage alloc] init] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[segmentedControl setDividerImage:[[UIImage alloc] init] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[segmentedControl setFrame:CGRectMake(0, 0, 100, 30)];
[segmentedControl setMomentary:YES];

UIBarButtonItem *segmentedButton = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];

self.navigationItem.rightBarButtonItem = segmentedButton;
注意对setBackgroundImage:和setDividerImage:的调用。它们是必需的,因此控件看起来就像Mail.app中的控件。这种设置是有效的:

问题是,旋转后它不会保持这种状态。在横向模式下使用iPhone时,RightBarButtonim会自动调整大小,即使在将设备返回到纵向模式后,它看起来也会损坏并保持这种状态:

控制仍然按计划工作,但是。。。它看起来不再那么漂亮了

我已经尝试了很多属性和不同的设置,除了没有为控件背景设置空UIImage之外,似乎没有任何效果。如果我注释掉setBackgroundImage:和setDividerImage:代码片段,则控件即使在旋转后仍保持其外观:

但这不是我一直在寻找的用户界面


你知道有什么方法可以达到预期的外观,并且仍然有正确的行为吗?或者甚至是什么原因首先会导致调整大小?

您可以尝试使用双UIButton来代替UISegmentControl

UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithCustomView:customView];
self.navigationItem.rightBarButtonItem = rightItem;

这种方法的问题是,几乎不可能获得所有正确的间距来重现UISegmentedControl外观。你必须开始处理ImageInset和属性之类的东西,而这最终对不同的屏幕尺寸不起作用。