微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 在NIB文件中定义的自定义视图的AutoLayout问题,并在StoryBoard中使用

我已经在NIB文件中定义了一个自定义视图,并希望在StoryBoard中实例化一个副本,但是我在使用autolayout时遇到问题.

一个简单的示例中,自定义视图具有固定大小的单个标签,并且垂直和水平居中,全部使用autolayout.

文件所有者设置为我的课程,它有顶部视图的插座.在自定义视图实现中我做:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if(self)
    {
        [[NSBundle mainBundle] loadNibNamed:@"FMCompassView" owner:self options:nil];
        [self addSubview:self.topView];
    }
    return self;
}

现在,在我的故事板中,我添加一个UIView,将其设置为我的自定义类,并将其排列大小并集中在我的页面上,再次使用autolayout.

而且我的小部件的位置和大小正确,但内容没有调整大小如下图所示:

我从NIB加载后尝试添加更多的约束,其中的一些是:

UIView* subV = self.topView;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(subV);
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[subV]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:viewsDictionary]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[subV]|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:viewsDictionary]];

但这会导致无效的布局约束.

关于如何让这个工作的任何想法?

干杯!

解决方法

从加载NIB创建的视图需要被告知不要将自动调整大小的掩码转换为约束,即使NIB的内容实际上是通过启用autolayout创建的.

因此,在加载NIB之后,将其顶视图添加自定义视图之前,我需要调用

[self.topView setTranslatesAutoresizingMaskIntoConstraints:NO];

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐