我有一个XIB(文件所有者:DesignableView
),我在Interface Builder中以两种不同的大小类列出:
我想在另一个XIB文件中使用此DesignableView
。由于我是一个巨大的WYSIWYG粉丝,我创建了视图IB_DESIGNABLE
并将以下代码添加到文件的所有者类中:
DesignableView.h
IB_DESIGNABLE
@interface DesignableView : UIView
@end
DesignableView.m
@implementation DesignableView
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self loadNib];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self loadNib];
}
return self;
}
- (void)loadNib
{
NSString *nibName = NSStringFromClass(self.class);
NSBundle *bundle = [NSBundle bundleForClass:self.class];
UINib *nib = [UINib nibWithNibName:nibName bundle:bundle];
UIView *view = [nib instantiateWithOwner:self options:nil][0];
view.frame = self.bounds;
view.layoutMargins = self.layoutMargins;
[self addSubview:view];
}
@end
所有这些代码都是在Interface Builder中的任何地方呈现视图。
现在我创建另一个XIB文件并将其文件所有者设置为ContainerView
。我向它添加了两个空的UIViews并将它们的class属性设置为DesignableView
。 Interface Builder会在几秒钟后更新视图,并显示第一个XIB中列出的两个DesignableView
- 正如预期的那样。
但是,它始终会加载“任意|任意”大小类DesignableView
中指定的布局 - 无论ContainerView
的大小等级如何(请参阅下面的屏幕截图)。
(在运行时,DesignableView
始终显示正确的大小类布局。)
有没有办法让Interface Builder在正确的大小类中显示IB_DESIGNABLE视图?
即。想要的行为是:
while editing ContainerView.xib in Interface Builder
↓
switch size class (e.g. to Regular | Any)
↓
Interface Builder draws subviews with class `DesignableView`
with the respective size class (Regular | Any)