如何使UIView子类框架在外部不可变

时间:2012-07-15 14:18:49

标签: objective-c ios uiview

我想编写一个UIView的子类,其框架在外面是不可变的(例如UIPickerView,UISwitch)。所以我尝试覆盖layoutSubviews,sizeToFit和setFrame,但是没有工作。
谁知道如何实现它像UIKit的UIPickerView或UISwitch,谢谢。

更新

- (void)setFrame:(CGRect)frame        
{
    [super setFrame:frame];
    self.frame = CGRectMake(0, 0, 200, 200);
}

我无法使用_frame设置视图的帧,所以当我写这些时,我将进入无限循环。

2 个答案:

答案 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)];
}