【问题标题】:Place UILabel next to UIView using Auto Layout使用自动布局将 UILabel 放在 UIView 旁边
【发布时间】:2013-12-10 13:15:59
【问题描述】:

我想将 UIView 水平放置在 UILabel 的右侧。 UILabel 具有可变宽度,具体取决于其中的文本。图形化:

|这是文字|我的观点|

|这是长篇大论|我的看法|

你能告诉我如何使用自动布局以编程方式创建这个界面吗?

我有这个:

self.myLabel = [[[UILabel alloc] init] autorelease];
self.myView = [[[UIView alloc] init] autorelease];

[self addSubview:self.myLabel];
[self addSubview:self.myLabel];

但现在我需要自动布局约束将myView 放置在myLabel 的右侧,并使myLabel 的宽度适合它包含的文本。你知道这是怎么做到的吗?

感谢您的帮助。

【问题讨论】:

    标签: ios objective-c autolayout


    【解决方案1】:

    您可以使用 sizeToFit

    为您的 UILabel 设置动态宽度
    [self.myLabel sizeToFit]
    

    之后你会得到帧的最大 x

    CGRectGetMaxX(self.myLabel.frame)
    

    因此,如果您想将视图放置在标签旁边,请将视图的框架设置为

    self.myView.frame = CGRectMake(CGRectGetMaxX(self.myLabel.frame)+10, y, WIDTH, HEIGHT);
    

    【讨论】:

    • 自动布局约束不适合您的标签宽度与您的文本大小。您需要为此使用上述方法
    【解决方案2】:

    假设它是一个具有固定行数的标签,它知道自己的宽度,您不必专门设置它。水平放置它们的约束如下。

    NSMutableDictionary viewsDictionary = [[NSMutableDictionary alloc] initWithObjects:@[self.myLabel, self.myView] forKeys:@[@"mylabel", @"myview"]];
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[mylabel]-[myview]" options:0 metrics:nil views:viewsDictionary];
    

    此约束仅指定水平布局。要完成这项工作,您还必须指定垂直位置,以便约束系统可以准确确定视图的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      相关资源
      最近更新 更多