我有一个UIView
由两个子视图组成的-
@interface ANImageLabel : UIView
@property (strong, nonatomic) UIImageView *imageView;
@property (strong, nonatomic) UILabel *label;
- (id)initWithFrameAtOrigin:(CGPoint)origin imageViewSize:(CGSize)imageViewSize labelSize:(CGSize)labelSize;
@end
- (id)initWithFrameAtOrigin:(CGPoint)origin imageViewSize:(CGSize)imageViewSize labelSize:(CGSize)labelSize
{
CGRect frame = CGRectZero;
frame.origin = origin;
// height should be the max of both heights
CGFloat height = MAX(imageViewSize.height, labelSize.height);
CGFloat width = imageViewSize.width + labelSize.width;
imageViewSize.height = labelSize.height = frame.size.height = height;
frame.size.width = width;
self = [super initWithFrame:frame];
if (self) {
// Initialization code
CGRect imageViewFrame = CGRectZero;
imageViewFrame.origin = origin;
imageViewFrame.size = imageViewSize;
self.imageView = [[UIImageView alloc] initWithFrame:imageViewFrame];
self.imageView.contentMode = UIViewContentModeCenter;
[self addSubview:self.imageView];
CGRect labelFrame = CGRectZero;
labelFrame.origin.x = origin.x + imageViewSize.width;
labelFrame.origin.y = origin.y;
labelFrame.size = labelSize;
self.label = [[UILabel alloc] initWithFrame:labelFrame];
[self addSubview:self.label];
}
return self;
}
我想在另一个视图 ( ) 中alloc-init
将此视图 ( ) 的一个实例添加为子视图。但是,如果我直接将此视图添加为子视图,则它不起作用。anImageLabelInstance
mySuperView
[mySuperView addSubview:anImageLabelInstance]; <--- DOESN'T WORK, WHY?
另一方面,如果我单独添加视图,它可以工作-
[anImageLabelInstance.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) {
[mySuperView addSubview:view];
}];
的描述addSubview
说
如果视图已经有一个超级视图并且该视图不是接收者,则此方法会在使接收者成为其新的超级视图之前删除先前的超级视图。
但是,由于anImageLabelInstance
在此操作之前最初没有将其作为子视图添加到任何其他视图,为什么我需要单独添加视图?视图的所有子视图不应该用addSubview
方法添加吗?