如何为动态创建的控件实现自动布局?

Posted

技术标签:

【中文标题】如何为动态创建的控件实现自动布局?【英文标题】:How to implement auto layout for dynamically created controls? 【发布时间】:2014-10-30 11:39:42 【问题描述】:

我已经动态创建了一些显示在设备底部的控件,为此我需要根据设备高度为所有控件提供框架。但是当设备高度发生变化时这很复杂,我的代码是

-(void)viewWillAppear:(BOOL)animated


    if([[UIScreen mainScreen]bounds].size.height==568)
    
        xaxis=25;
        yaxis=350;
    
    else
    
        xaxis=25;
        yaxis=260;
    

    UILabel *label1=[[UILabel alloc]initWithFrame:CGRectMake(xaxis+35, yaxis+35, 250, 50)];

    label1 =@“This is first Label;

    UILabel *label2=[[UILabel alloc]initWithFrame:CGRectMake(xaxis+100, yaxis+50, 120,50)];

    label2.text=@"This is second Label";


    [self.view addSubview: label1];
    [self.view addSubview: label2];


任何人都可以建议如何为这些控件实现自动布局,以及在启用个人热点时应该进行调整。

【问题讨论】:

使用约束来管理控件 3.5" 和 4" 使用[parentView addConstraint:[NSLayoutConstraint constraintWithItem:... 你能简单解释一下吗? 【参考方案1】:

您需要以编程方式创建所有自动布局约束。 只需使用addConstraint 方法,如下所示

CGFloat bottom = 10;
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:label1 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:bottom]];

您还需要创建添加其他约束。

【讨论】:

感谢您的回复!我添加了底部值为 0 的约束,我的标签出现在底部和左侧,只出现了一些文字。为什么会这样?我需要给控件提供 NSLayoutAttributeLeft,NSLayoutAttributeWidth,NSLayoutAttributeHeight 约束? @StackUser 添加子视图后尝试使用 [self layoutSubtreeIfNeeded] 方法。 你可以编辑我的代码,让标签出现在屏幕底部吗?(即 label1 在 label2 上方) @StackUser 只是根据需要在一些测试 nib 文件中创建约束,然后在您的类中以编程方式创建所有约束。密切关注您添加约束的对象。

以上是关于如何为动态创建的控件实现自动布局?的主要内容,如果未能解决你的问题,请参考以下文章

如何为不同的屏幕尺寸创建具有自动布局的比例视图?

如何为通用应用程序制作自动布局

如何为不同设备自动布局应用程序。

UITableView 自动布局定位

使用堆栈视图和自动布局创建自定义 UITableViewCell

将 iOS 项目转换为自动布局