2

我有一个 XIB(文件的所有者:)DesignableView,我在 Interface Builder 中以两个不同的大小类进行了布局:


DesignableView.xib:任意 | 任何

Designable View.xib: 任意 |  任何


DesignableView.xib:常规 | 任何

Designable View.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:任意 | 任何

Container View.xib: 任意 |  任何


ContainerView.xib:常规 | 任何

Container View.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)
4

0 回答 0