gpt4 book ai didi

ios - 如何在 iOS 6 中使用具有多个 subview 的现有自定义 View 自动布局

转载 作者:行者123 更新时间:2023-11-28 20:21:45 26 4
gpt4 key购买 nike

我正在尝试使用约束来制作布局,但我有许多带有内部嵌套 subview 的自定义控件。我正在向顶 View (CustomView) 添加约束,但它没有正确布置 subview 。

例。我有 TextFieldWithLabel 类,它在 UITextField 的顶部和下方显示标签我正在创建 TextFieldWithLabel 的实例并添加到具有约束的 super View 。

但是它并没有像预期的那样显示结果。虽然它可见但没有放在我想要的地方。为此我不想更改整个 TextFieldWithLabel 类 foe 自动布局。

请帮忙!

usernameTextField = [[TextFieldWithLabel alloc] initWithFrame:CGRectMake(0, 0, 100, 50) name:@"UserName"];
[usernameTextField setTranslatesAutoresizingMaskIntoConstraints:NO];
[superview addSubview:usernameTextField];
NSLayoutConstraint* myConstraint = [NSLayoutConstraint constraintWithItem:usernameTextField
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:superview
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0];

[superview addConstraint:myConstraint];

myConstraint = [NSLayoutConstraint constraintWithItem:usernameTextField
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:superview
attribute:NSLayoutAttributeCenterX
multiplier:1
constant:0];
[superview addConstraint:myConstraint];

屏幕截图:这里它没有居中,文本字段 (RedColor) 也不可单击。标签和文本字段放置在 TextFieldWithLabel 中。请注意:TextFieldWithLabel 是 ComponentView 的子类,而 ComponentView 是 UIView 的子类。所以我怀疑这可能是问题所在?我还需要自动布局 ComponentsView 吗? UITextField

最佳答案

在自动布局下,您的帧大小将被忽略(您在 initWithFrame: 期间使用的帧大小)。您已指定定位约束,但与大小无关,因此您的 TextFieldWithLabel 位于屏幕中心,大小为零。

文本字段和标签仍然可见,因为您说您没有在该控件内部使用自动布局 - 大概您确实在其中设置了一些框架和自动调整蒙版。因此,文本字段和标签位于 TextFieldWithLabel 的边界之外,因此它们是可见的,但可能不响应触摸。

要解决这个问题,您有两个选择:

  • 在内部使用自动布局 - 例如,如果您有此约束(在 VFL 中),那么它会自动为您的控件提供高度:"V:|-[label]-[textField]-|"
  • 在上面的代码中添加大小限制 - 使用与 initWithFrame 中相同的尺寸。这是一个用于设置高度的方法:

    [NSLayoutConstraint constraintWithItem:usernameTextField 
    attribute:NSLayoutAttributeHeight
    relatedBy:NSLayoutRelationEqual
    toItem:nil
    attribute:NSLayoutAttributeNotAnAttribute
    multiplier:0.0
    constant:50.0];

我在 UIView 上有一个类别来简化公共(public)约束的创建 here .使用您要执行的类别代码 centerInView:constrainToSize:

关于ios - 如何在 iOS 6 中使用具有多个 subview 的现有自定义 View 自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15636305/

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