将一个 xib 粘贴到另一个 xib

Posted

技术标签:

【中文标题】将一个 xib 粘贴到另一个 xib【英文标题】:paste one xib onto another xib 【发布时间】:2015-07-11 06:58:15 【问题描述】:

我想将蓝色视图粘贴到黄色视图上。

screenshot

但是,无论我如何更改蓝色的自动布局,都会有冲突。

按下中间的按钮,就会显示视图。

Xcode project

【问题讨论】:

【参考方案1】:

将此行添加到您的文件中,包括 UIViewController+testAlert.m

containerFrame.size.width = view.frame.size.width;

紧接着

containerFrame.size.height = view.frame.size.height;

所以你的 showAlertViewB 函数代码会像

if (show) 
    NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"AlertViewB" owner:self options:nil];
    alertViewB = (AlertViewB*)[nibViews objectAtIndex:0];
//        [alertViewB removeConstraint:alertViewB.containerHeightConstraint];
//        NSLayoutConstraint *newContainerHeightConstraint = [NSLayoutConstraint constraintWithItem:alertViewB attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0 constant:view.frame.size.height];
//        [alertViewB addConstraint:newContainerHeightConstraint];
    CGRect containerFrame = alertViewB.container.frame;
    containerFrame.size.height = view.frame.size.height;
    containerFrame.size.width = view.frame.size.width;
    [alertViewB.container setFrame:containerFrame];

    [alertViewB setTranslatesAutoresizingMaskIntoConstraints:YES];
    alertViewB.delegate =self;
    [alertViewB showWithView:view];
 else 
    [alertViewB removeFromSuperview];
    alertViewB = nil;

【讨论】:

请问为什么这样有效?即使我注释掉 ViewController.m 第 46~49 行和 UIViewController+testAlert.m 第 41 行。 我不熟悉在代码中设置框架如何与自动布局交互。 如果您为两个视图设置框架并使用此 setTranslatesAutoresizingMaskIntoConstraints 那么它将在运行时自动添加必要的约束。您没有更改视图的宽度,这就是它没有占用全宽的原因。

以上是关于将一个 xib 粘贴到另一个 xib的主要内容,如果未能解决你的问题,请参考以下文章

复制并粘贴我的 xib 文件并保留参考

将 XIB 加载到另一个 XIB 的视图中

如何将 xib 的子视图显示到另一个 xib 的表格单元加载中

AppDelegate 和 .xib 未正确实施,但构建成功?

在情节提要中调用 xib

XIB 到情节提要