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)
而且你不必关心别的什么!
Ben*_*o85 19
这是mxg答案的快速3版本:
let mySwitch = UISwitch()
mySwitch.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
Run Code Online (Sandbox Code Playgroud)
许多控件都是特定的大小.如果你自己实现它,你将覆盖setFrame:,调整frame参数以匹配你的控件所需的大小,然后将其传递给[super setFrame:].
如果你对具有这种行为的控件进行子类化,那么实际上没有办法覆盖它,因为你的子类将继承超类的实现setFrame:,它会修改你的框架矩形.没有调用就无法设置控件的框架[super setFrame:].
您很可能必须UIControl从UISwitch手动继承并实现您想要的属性/行为来解决此问题.
| 归档时间: |
|
| 查看次数: |
45579 次 |
| 最近记录: |