我有一个 XIB(文件的所有者:)DesignableView
,我在 Interface Builder 中以两个不同的大小类进行了布局:
DesignableView.xib:任意 | 任何
DesignableView.xib:常规 | 任何
我想DesignableView
在另一个 XIB 文件中使用它。由于我是WYSIWYG的忠实粉丝,因此我制作了视图IB_DESIGNABLE
并将以下代码添加到文件的所有者类中:
设计视图.h
IB_DESIGNABLE
@interface DesignableView : UIView
@end
设计视图.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
. 我向其中添加了两个空 UIView,并将它们的类属性设置为DesignableView
. Interface Builder 会在几秒钟后更新视图,并DesignableView
按照第一个 XIB 中的布局显示两个 s - 正如预期的那样。
但是,它总是加载在“任何 | 任何”尺寸类中指定的布局DesignableView
- 无论ContainerView
的尺寸类如何(参见下面的屏幕截图)。
ContainerView.xib:任意 | 任何
ContainerView.xib:常规 | 任何
(在运行时,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)