gpt4 book ai didi

iphone - 以编程方式在子类 UIView 的 subview 上自动布局

转载 作者:行者123 更新时间:2023-12-03 18:26:40 24 4
gpt4 key购买 nike

我对 UIView 进行了子类化,以制作自定义 groupView,我用它以简单的方式向我的布局添加一些内容。该 groupView 包括一个用作标题的 UILabel 和一个在其 CALayer 上绘制具有背景颜色的 roundRect 的 UIView。想想 UITableView 的部分。我通过删除 UIView 并将其类更改为我的子类来将此 groupView 添加到 Storyboard。一切正常,我通过 Xcode 中的用户定义的运行时属性设置标题。一切都很好,我将 UILabels 添加到 Storyboard 上的此 View 中,它在运行时创建标题标签和圆角矩形。

我的groupView的结构:

  1. groupView: (UIView)clipToBounds:NO;
    • 标题:(UILabel)定位位于 groupView 上方。
    • contentView:(UIView) 创建 roundRect和颜色通过 CALayer,应该与 groupView 大小相同。

那么问题出在哪里呢?嗯,处理自动布局一开始是一件痛苦的事情,但是为了让这个子类化的 UIView 工作,我需要以编程方式设置 contentView 约束。我无法弄清楚这个自动布局 ASCII 格式字符串的语法。目前我有:

 _contentView = [[UIView alloc]initWithFrame:self.bounds];

_contentView.layer.cornerRadius = 5.0f;
_contentView.layer.masksToBounds=YES;
_contentView.backgroundColor=_backgroundColor;
_contentView.layer.borderWidth=_borderWidth;
_contentView.layer.borderColor=_borderColor.CGColor;
[self insertSubview:_contentView atIndex:0];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(self,_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"[self]-0-[_contentView]-0-[self]" options:0 metrics:nil views:viewsDictionary];

for (NSLayoutConstraint *constraint in constraints) {
[_contentView addConstraint:constraint];
}

崩溃原因:*由于未捕获的异常“NSGenericException”而终止应用程序,原因:“无法在 View 上安装约束。约束是否引用 View 子树外部的某些内容?这是非法的。约束: View :>'

我先尝试了这个,但仍然不起作用:

    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_contentView);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[_contentView]-0-|" options:0 metrics:nil views:viewsDictionary];

崩溃原因:*由于未捕获的异常“NSGenericException”而终止应用程序,原因:“无法在 View 上安装约束。约束是否引用 View 子树外部的某些内容?这是非法的。约束: View :>'

RANT: Somehow this AutoLayout is suppose to save us work, but I do not see how the benefits out weight the overhead right now. Why on earth did they move from using references and methods or even type defs to this archaic format string? How much easier would it be to do: [_contentView constraint:NSLayoutFormatAlignLeading toView:self withDistance:0.0f]; OR something similar? I would so much rather deal with springs and struts at this point.

任何帮助理解或向我展示将 contentView 限制为 self 大小的语法都会有所帮助。

最佳答案

该错误告诉您需要了解的内容:

Does the constraint reference something from outside the subtree of the view?

是的,确实如此。它引用它的 super View 。

您所做的这些约束需要应用于 super View ,在本例中为groupView

关于iphone - 以编程方式在子类 UIView 的 subview 上自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13478128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com