如何调整UISwitch的大小?

msh*_*yem 48 iphone cocoa cocoa-touch

我已经制作了一个自定义的UISwitch(来自这篇文章).但问题是,我的自定义文本有点长.有没有办法调整交换机的大小?[我试过setBounds,没用]

编辑:

这是我使用的代码:

@interface CustomUISwitch : UISwitch    
- (void) setLeftLabelText: (NSString *) labelText;
- (void) setRightLabelText: (NSString *) labelText;    
@end

@implementation CustomUISwitch

- (UIView *) slider 
{ 
    return [[self subviews] lastObject]; 
}
- (UIView *) textHolder 
{ 
    return [[[self slider] subviews] objectAtIndex:2]; 
}
- (UILabel *) leftLabel 
{ 
    return [[[self textHolder] subviews] objectAtIndex:0]; 
}
- (UILabel *) rightLabel 
{ 
    return [[[self textHolder] subviews] objectAtIndex:1]; 
}
- (void) setLeftLabelText: (NSString *) labelText 
{ 
    [[self leftLabel] setText:labelText]; 
}
- (void) setRightLabelText: (NSString *) labelText 
{ 
    [[self rightLabel] setText:labelText]; 
}
@end

mySwitch = [[CustomUISwitch alloc] initWithFrame:CGRectZero];

//Tried these, but did not work
//CGRect aFrame = mySwitch.frame;
//aFrame.size.width = 200;
//aFrame.size.height = 100;
//mySwitch.frame = aFrame;

[mySwitch setLeftLabelText: @"longValue1"];
[mySwitch setRightLabelText: @"longValue2"];
Run Code Online (Sandbox Code Playgroud)

mxg*_*mxg 177

最简单的方法是调整大小,作为一个视图:

 UISwitch *mySwitch = [[UISwitch alloc] init];
 mySwitch.transform = CGAffineTransformMakeScale(0.75, 0.75);
Run Code Online (Sandbox Code Playgroud)

而且你不必关心别的什么!

  • 这是最简单,最干净的解决方案!+1 (4认同)

Ben*_*o85 19

这是mxg答案的快速3版本:

let mySwitch = UISwitch()
mySwitch.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 7

许多控件都是特定的大小.如果你自己实现它,你将覆盖setFrame:,调整frame参数以匹配你的控件所需的大小,然后将其传递给[super setFrame:].

如果你对具有这种行为的控件进行子类化,那么实际上没有办法覆盖它,因为你的子类将继承超类的实现setFrame:,它会修改你的框架矩形.没有调用就无法设置控件的框架[super setFrame:].

您很可能必须UIControlUISwitch手动继承并实现您想要的属性/行为来解决此问题.