如何让一组标签在iOS中对齐?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让一组标签在iOS中对齐?相关的知识,希望对你有一定的参考价值。

我对ios开发相对较新,我的约束技能处于基本水平。我有一组像这样的标签

enter image description here

但是,公司名称和地址第2行并不总是必需的,因此在某些情况下它们是隐藏的,但是当它们存在时,我不知道如何将其他标签向上推,以便它们填充由隐藏标签创建的空间。

如果你们能给出解决方案,我们非常感谢。

答案

如果您正在使用约束,那么例如顶部标签应该具有前导,尾随和顶部到超级视图。

现在这个标签的高度取决于它的字体和文字。如果它的文本是空的,那么它的高度将为零,这是你基本上想要的。

现在,下一个标签最好是前导和尾随到superview(或它上面的标签),然后是垂直间距到它之前的标签。这意味着它将低于第一个。如果第一个没有文本,它将在顶部。

现在使用垂直偏移约束对所有其他标签执行相同操作。

注意你正在做什么似乎更适合使用UITableView或堆栈视图。但是如果你想要约束,那么这就是程序。

如果事情变得复杂,您还可以将约束拖到代码中并手动操作它们。例如:

self.companyNameHeightConstraint.constant = myDataMode.companyName.isEmpty == true ? 0.0 : 50.0

编辑:因为有些不清楚是否显示字段取决于一些外部标志或如果它们存在显示这些字符串我添加一个带外部标志的最小表视图过程:

@interface TableViewController () <UITableViewDelegate, UITableViewDataSource>

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *lastName;
@property (nonatomic, strong) NSString *companyName;
@property (nonatomic, strong) NSString *address1;
@property (nonatomic, strong) NSString *address2;

@property (nonatomic, readonly) BOOL isAddress2Shown;
@property (nonatomic, readonly) BOOL isCompanyNameShown;

@end

@implementation TableViewController

- (NSArray *)generateDsiaplyableStrings {
    NSMutableArray *array = [[NSMutableArray alloc] init];
    if(self.name) [array addObject:self.name];
    if(self.lastName) [array addObject:self.lastName];
    if(self.companyName && self.isCompanyNameShown) [array addObject:self.companyName];
    if(self.address1) [array addObject:self.address1];
    if(self.address2 && self.isAddress2Shown) [array addObject:self.address2];
    return array;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self generateDsiaplyableStrings].count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSArray *items = [self generateDsiaplyableStrings];
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil];
    cell.textLabel.text = items[indexPath.row];
    return cell;
}

@end
另一答案

HI Joel为什么不在表格视图单元格和集合中尝试堆栈视图

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

stackview和tableview将为您处理一切。

以上是关于如何让一组标签在iOS中对齐?的主要内容,如果未能解决你的问题,请参考以下文章

如何让一组开发人员访问同一个共享点站点并在其上共同开发?

在输入旁边对齐表单中的标签

如何通过代码设置片段标签?

如何让一只乌龟能够在 Netlogo 中保存其他乌龟 ID?

在使用视图 iOS 滚动 uilabel 时保持标签文本与屏幕中心对齐?

如何居中对齐测验标题中心下方的一组单选按钮并保持响应?