私はUIView
2つのサブビューで構成されています-
@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
か?