使Interface Builder使用当前选定的大小类绘制IB_DESIGNABLE子视图

时间:2016-02-10 17:20:01

标签: ios xcode interface-builder size-classes ibdesignable

我有一个XIB(文件所有者:DesignableView),我在Interface Builder中以两种不同的大小类列出:

DesignableView.xib:任何|任何

Designable View.xib: Any | Any

DesignableView.xib:常规|任何

Designable View.xib: Regular | Any

我想在另一个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的大小等级如何(请参阅下面的屏幕截图)。

ContainerView.xib:任何|任何

Container View.xib: Any | Any

ContainerView.xib:常规|任何

Container View.xib: Regular | Any

(在运行时,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)

0 个答案:

没有答案