如何将 swift NSLayoutConstraint activateConstraints 转换为目标 c?

Posted

技术标签:

【中文标题】如何将 swift NSLayoutConstraint activateConstraints 转换为目标 c?【英文标题】:How do I translate swift NSLayoutConstraint activateConstraints to objective c? 【发布时间】:2019-10-07 11:55:35 【问题描述】:

我已经成功地快速创建了一个项目,我按下viewController 中的按钮将其他viewControllersxib 文件加载到容器中。只是给你一个想法:

它工作得很好,但我很难将它翻译成objective-c,这是实际需要代码的地方。这是按下按钮时swift 代码的样子:

let sub3 = UINib(nibName: "thirdXib", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView

containerOutlet.addSubview(sub3)

NSLayoutConstraint.activate([
    sub3.leadingAnchor.constraint(equalTo: containerOutlet.leadingAnchor),
    sub3.trailingAnchor.constraint(equalTo: containerOutlet.trailingAnchor),
    sub3.topAnchor.constraint(equalTo: containerOutlet.topAnchor),
    sub3.bottomAnchor.constraint(equalTo: containerOutlet.bottomAnchor)
        ])

现在,我希望所有这些代码都在 objective-c 中。在objective-c 我已经完成了第一部分,我认为这是正确的:

UINib *nib = [UINib nibWithNibName:@"SecondView" bundle:nil];
[nib instantiateWithOwner:self options:nil];

[containerOutlet addSubview:((UIView*)nib)];

但我对最后一部分有问题,NSLayoutConstraint activateConstraints

[NSLayoutConstraint activateConstraints:@[
        [nib.lead],
        [nib.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor],
        ]
 ];

编译器说property lead not found on object of type UIBib 和下面的代码相同。我已经尝试了这些的变体,但不正确。如何在我的 xib 上设置尾随、前导、底部和顶部约束?我需要添加#import SecondView.xib" in the.h` 文件吗?顺便问一下?

【问题讨论】:

sub3UIViewnibUINib*。试试UIView *sub3 = [nib instantiateWithOwner:self options:nil][0] @Willeke 我将nib 转换为UIView 就像这样:(UIView*)nib) 但似乎没有什么不同(也更改了原始帖子)。 nib 仍然是 UINib*。从[nib instantiateWithOwner:self options:nil][0] 获取视图UIView *sub3 @Willeke *sub3 在一个完全不同的项目中。我无权访问它。以我的方式进行类型转换不起作用吗?不知道我是否理解如何将其设为UIView 【参考方案1】:

你可以试试

UINib *nib = [UINib nibWithNibName:@"SecondView" bundle:nil]; 
UIView *sub3 = [nib instantiateWithOwner:self options:nil][0]; 
[containerOutlet addSubview:sub3];


[NSLayoutConstraint activateConstraints:@[
   [sub3.leadingAnchor constraintEqualToAnchor:scontainerOutlet.leadingAnchor],
   [sub3.trailingAnchor constraintEqualToAnchor:containerOutlet.trailingAnchor],
   [sub3.topAnchor constraintEqualToAnchor:containerOutlet.topAnchor],
   [sub3.bottomAnchor constraintEqualToAnchor:containerOutlet.bottomAnchor]
]];

【讨论】:

对不起,我可能有点不清楚。我没有使用sub3 那是swift 代码。在objective-c 中,xib 引用称为nib。可以更新答案吗?还是我误解了你的代码? 使用 *sub3 跳过来自不同项目的所有内容。 nib 类型为 UINib 不能与约束一起使用,您需要获取其中的视图,sub3 是变量名而不是类型它可以是任何东西 好的,那我误会了。谢谢,我会调查并回复你! :) 什么是SecondView?与xib 视图关联的类?文件所有者?我上面写的时候是文件名,如SecondView.xib

以上是关于如何将 swift NSLayoutConstraint activateConstraints 转换为目标 c?的主要内容,如果未能解决你的问题,请参考以下文章

如何将以下代码从 Swift 2 转换为 Swift 5?

Swift:如何将字符串放入 \()? [复制]

Swift:如何将 MapView 放入 UIView(?)

如何在 Swift 中从 NSData 显示 PDF - 如何将 PDF 保存到文档文件夹 Swift - 如何在 Swift 中通过 WebView 从保存的 NSData 显示 PDF

如何将此 NSClassFromString 代码转换为 Swift?

如何将代码 AVFoundation 目标 c 转换为 Swift?