У меня была такая же проблема.
Я попытался решить эту проблему и придумал это решение.
Я не думаю, что это идеальное решение и может не работать на каждой версии iOS.
Прежде всего, необходимо создать подкласс UISwitch так:
@interface UICustomSwitch : UISwitch
@property (assign, nonatomic) CGFloat scale;
@end
@implementation UICustomSwitch
- (void)setFrame:(CGRect)frame {
CGFloat superview_height = self.superview.frame.size.height;
frame.origin.y = (superview_height - frame.size.height * _scale)/2;
[super setFrame:frame];
}
@end
Второе, что нужно сделать, это создать и настроить ваш UICustomSwitch так:
UICustomSwitch* switch = [UICustomSwitch new];
switch.transform = CGAffineTransformMakeScale(0.75, 0.75);
switch.scale = 0.75;
UIBarButtonItem* button = [[UIBarButtonItem alloc] initWithCustomView:switch];
Чтобы создать больше пространства между 175 и переключатель вы могли бы просто добавить еще UIBarButtonItem
между 175 и коммутатором. Например. фиксированная проставка с определенной шириной.
Как я уже сказал, я не думаю, что это безупречное решение.
В моих тестах это сработало.
Другое решение по 0yeoj (но немного скорректирована -> всегда сосредоточены на любой высоте Панель навигации, для панелей инструментов это то же самое, просто использовать self.navigationController.toolbar.frame.size.height
):
UIView* switch_container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, self.navigationController.navigationBar.frame.size.height)];
UISwitch* switch = [[UISwitch alloc] initWithFrame:switch_container.bounds];
switch.transform = CGAffineTransformMakeScale(0.75, 0.75);
switch.center = CGPointMake(switch_container.bounds.size.width/2, switch_container.bounds.size.height/2);
[switch addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged];
[switch_container addSubview:switch];
UIBarButtonItem* button = [[UIBarButtonItem alloc] initWithCustomView:switch_container];
self.navigationItem.rightBarButtonItem = button;
При использовании 'transform', я бы посоветовал не использовать а.е. tolayout с ним. Ограничения не очень хорошо сочетаются с 'transform'. Удалите все ограничения, затем измените «center». – Sulthan