Objective C 相当于 Swift addConstraints?

Posted

技术标签:

【中文标题】Objective C 相当于 Swift addConstraints?【英文标题】:Objective C equivalent of Swift addConstraints? 【发布时间】:2017-08-29 16:57:05 【问题描述】:

我是使用代码自动布局的新手。

addConstaints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-16-[v0]-16-|",options:NSLayoutFormatOptions(), metrics:nil ,views:["v0":thumbnailImageView]))

addConstaints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-16-[v0]-16-|",options:NSLayoutFormatOptions(), metrics:nil ,views:["v0":thumbnailImageView]))

我正在尝试使用以下代码在 Objective C 中实现上述 swift 代码,但应用程序在加载时崩溃并出现以下错误

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法解析约束格式: 期待一个视图 H:|-16-[v0]-16-| ^'

    [self addConstraints:[NSLayoutConstraint 
constraintsWithVisualFormat:@"H:|-16-[v0]-16-|" 
options:0 
metrics:nil 
views:NSDictionaryOfVariableBindings(thumbnailImageView)]];

    [self addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-16-[v0]-16-|" 
options:0 
metrics:nil 
views:NSDictionaryOfVariableBindings(thumbnailImageView)]];

.....

UIImageView * thumbnailImageView = [[UIImageView alloc] init];
        thumbnailImageView.backgroundColor = [UIColor greenColor];
        thumbnailImageView.translatesAutoresizingMaskIntoConstraints = false;

        [self addSubview:thumbnailImageView];


        thumbnailImageView.frame = CGRectMake(0, 0, 100, 100);

【问题讨论】:

去掉空格@"H: |-16-[v0]-16-|"应该是@"H:|-16-[v0]-16-|" @ReinierMelian 感谢您的回复。我试过了,但还是因为同样的错误而崩溃 @ReinierMelian 您对 swift 的 obj c 语法的看法。它们是等价的吗?我必须做出改变吗? 在 Objctive-C 代码中你有一个空格你检查删除它吗? @ReinierMelian 是的,我在 Xcode 中删除了空格,但仍然崩溃 【参考方案1】:

NSDictionaryOfVariableBindings 生成与您的 Objective-C 变量名称匹配的变量绑定。所以你需要把约束写成

[self addConstraints:[NSLayoutConstraint 
constraintsWithVisualFormat:@"H:|-16-[thumbnailImageView]-16-|" 
options:0 
metrics:nil 
views:NSDictionaryOfVariableBindings(thumbnailImageView)]];

或者你直接跳过NSDictionaryOfVairableDBindings 并使用:

[self addConstraints:[NSLayoutConstraint 
constraintsWithVisualFormat:@"H:|-16-[v0]-16-|" 
options:0 
metrics:nil 
views:@ @"v0" : thumbnailImageView  ];

这有点像 Swift 版本。 (暂时没有方便的编译器,所以第二部分可能会出现一些小的语法错误。将尽快检查)。

【讨论】:

感谢您的帮助【参考方案2】:

您错误地使用了宏 NSDictionaryOfVariableBindings 您需要传递变量名

/* 这个宏是一个帮助创建视图字典 +constraintsWithVisualFormat:options:metrics:views:。 NSDictionaryOfVariableBindings(v1, v2, v3) 等价于 [NSDictionary 字典WithObjectsAndKeys:v1,@“v1”,v2,@“v2”,v3, @"v3",无]; */

 [self addConstraints:[NSLayoutConstraint 
constraintsWithVisualFormat:@"H:|-16-[thumbnailImageView]-16-|" 
options:0 
metrics:nil 
views:NSDictionaryOfVariableBindings(thumbnailImageView)]];

    [self addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-16-[thumbnailImageView]-16-|" 
options:0 
metrics:nil 
views:NSDictionaryOfVariableBindings(thumbnailImageView)]];

【讨论】:

感谢您的帮助

以上是关于Objective C 相当于 Swift addConstraints?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 相当于我的 Objective-C 块

Swift in Weex

Swift(08)- 函数

制作Swift和Objective-C Mixed的Pod

从 Objective C 类调用 Swift 方法

如何在objective c框架中使用swift扩展