iOS - 在UINavigationBar中调整UISwitch的大小

时间:2015-03-14 04:09:25

标签: ios objective-c ios8 uinavigationbar uiswitch

我正在尝试在UISwitch中使用UINavigationBar。我想要一个比默认值更小的开关,所以我用anonymousSwitch.transform = CGAffineTransformMakeScale(0.55, 0.55);缩小了尺寸。当我这样做时,开关收缩,但我无法弄清楚如何将它与我{{1}中的其他元素垂直对齐}}。 这是目前的样子: enter image description here

理想情况下,UINavigationBar与175 UISwitch之间的间隔距离为UILabelUIButton间距UILabelUISwitch的距离将与UINavigationBar中的其余元素成直线。我尝试过switch.center = CGPointMake(switch.center.x, shareButton.center.y),但这并不会影响UISwitch的展示位置。 有没有办法让我像我想要的那样定位开关?

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题 我试图解决它并想出了这个解决方案 我不认为它是一个完美的解决方案,可能无法在每个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和交换机之间创建更大的空间,您可以在175和交换机之间添加另一个UIBarButtonItem。例如。具有特定宽度的固定垫片。

就像我说的那样,我认为这不是一个完美的解决方案 在我的测试中它起作用了。

0yeoj的另一个解决方案(但稍微调整一下 - >总是以每个navigationBar高度为中心,对于工具栏,它只是使用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;

答案 1 :(得分:0)

您是否尝试使用其他转换方法移动开关,例如

CGAffineTransformMakeTranslation(xValue, yValue);

您也可以将两个变换合并在一起,并将该变换转换为

CGAffineTransform scale= CGAffineTransformMakeScale(0.55, 0.55);

CGAffineTransform translate = CGAffineTransformMakeTranslation(0, 10);

anonymousSwitch.transform = CGAffineTransformConcat(scale, translate);

答案 2 :(得分:0)

这是我测试的代码..

$scope.optionsObject = [ { name: "India", code: "IN" }, { name: "Singapore", code: "SG" }, { name: "Malaysia", code: "MY" }, { name: "Indonesia", code: "INDY" } ];

嗯...我还没有降级到优胜美地所以我没有ios8.3这里这个代码对我来说很完美..