3

我正在尝试通过代码构建视图。在我的初始化中,我有这个:

- (id) init{
    self = [super init];
    if(self){
       [self setFrame:CGRectMake(0, 0, 0, 50)];   
       [self addSubview:[self dateNumberView]];
        NSDictionary *views = NSDictionaryOfVariableBindings(self.dateNumberView);
       [self.dateNumberView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[dateNumberView]-|" options:0 metrics:nil views:views]];
    }
    return self;
}

我得到的错误是:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse constraint format:  dateNumberView is not a key in the views dictionary. |-[dateNumberView]-| 

怎么了?

4

3 回答 3

7

不要使用:

NSDictionary *views = NSDictionaryOfVariableBindings(self.dateNumberView);

因为该self.部分被系统误解(KVC 类型导航)。相反,获取对视图的本地引用并在整个代码中使用它:

- (id) init{
    self = [super init];
    if(self) {
       UIView *dateNumberView = [self dateNumberView];

       [self setFrame:CGRectMake(0, 0, 0, 50)];   
       [self addSubview: dateNumberView];
        NSDictionary *views = NSDictionaryOfVariableBindings(dateNumberView);
       [dateNumberView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[dateNumberView]-|" options:0 metrics:nil views:views]];
    }

    return self;
}
于 2013-11-06T15:25:40.980 回答
7

usingself.只是用于调用返回对象的方法的语法糖,它不是您可以用作键的东西。

试试这个:

NSDictionary *views = NSDictionaryOfVariableBindings(_dateNumberView);

如果您使用自动合成的属性,这应该是正确的。

于 2013-11-06T15:25:49.103 回答
0

我认为您正在尝试对 @property 变量使用可视格式,因此请查看以下链接,它可能会对您有所帮助

布局:如何以视觉格式使用属性

于 2018-10-16T05:11:36.557 回答