我想编写一个UIView的子类,其框架在外面是不可变的(例如UIPickerView,UISwitch)。所以我尝试覆盖layoutSubviews,sizeToFit和setFrame,但是没有工作。
谁知道如何实现它像UIKit的UIPickerView或UISwitch,谢谢。
更新
- (void)setFrame:(CGRect)frame
{
[super setFrame:frame];
self.frame = CGRectMake(0, 0, 200, 200);
}
我无法使用_frame设置视图的帧,所以当我写这些时,我将进入无限循环。
答案 0 :(得分:2)
覆盖-setBounds:
以将视图限制为给定范围。
这样的事情应该有效:
static CGFloat maxHeight = ...;
static CGFloat maxWidth = ...;
- (void)setBounds:(CGRect)bounds {
CGSize size = bounds.size;
size.width = MIN(maxWidth, size.width);
size.height = MIN(maxHeight, size.height);
bounds.size = size;
[super setBounds:bounds];
}
答案 1 :(得分:2)
self.frame = newFrame
与调用[self setFrame:newFrame]
基本相同,这就是它进入无限循环的原因。
但是你可以这样做:
- (void)setFrame:(CGRect)frame
{
[super setFrame:CGRectMake(0, 0, 200, 200)];
}
请注意,这会将锚点(左上角)设置为(0,0),这可能不是您想要的。请改用setBounds:
或将原点传递给super:
- (void)setFrame:(CGRect)frame
{
[super setFrame:CGRectMake(frame.origin.x, frame.origin.y, 200, 200)];
}