0

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

更新:

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

我无法使用_frame设置视图的框架,所以当我写这些时,我会进入一个无限循环。

4

2 回答 2

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];
}
于 2012-07-15T14:28:06.060 回答
2

self.frame = newFrame本质上与调用相同[self setFrame:newFrame],这就是它进入无限循环的原因。

但是,您可以这样做:

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

请注意,这会将锚点(左上角)设置为 (0,0),这可能不是您想要的。改用setBounds:或将原点传递给超级:

- (void)setFrame:(CGRect)frame        
{
    [super setFrame:CGRectMake(frame.origin.x, frame.origin.y, 200, 200)];
}
于 2012-07-15T14:43:23.940 回答