Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使一组标签在iOS中对齐?_Ios_Objective C_Layout - Fatal编程技术网

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

如何使一组标签在iOS中对齐?,ios,objective-c,layout,Ios,Objective C,Layout,我对iOS开发比较陌生,而且我的约束技能处于基本水平。我有一组这样的标签 但是,公司名称和地址行2并非总是必需的,因此在某些情况下它们是隐藏的,但当它们是时,我不知道如何向上推其他标签,以便它们填充隐藏标签创建的空间 如果你们能给出一个解决方案,我将不胜感激。如果你们使用的是约束,例如,顶部标签应该有前导、尾随和从上到下的视图 现在,此标签的高度取决于其字体和文本。如果它的文本是空的,那么它的高度将是零,这是您基本上想要的 现在,下一个标签最好在superview(或其上方的标签)前面加上前导

我对iOS开发比较陌生,而且我的约束技能处于基本水平。我有一组这样的标签

但是,公司名称地址行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
@接口TableViewController()
@属性(非原子,强)NSString*名称;
@属性(非原子,强)NSString*lastName;
@属性(非原子,强)NSString*companyName;
@属性(非原子,强)NSString*address1;
@属性(非原子,强)NSString*address2;
@属性(非原子,只读)BOOL isaddress 2显示;
@属性(非原子,只读)BOOL是公司名称;
@结束
@TableViewController的实现
-(NSArray*)生成的SiaplyableString{
NSMUTABLEARRY*array=[[NSMUTABLEARRY 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];
返回数组;
}
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节{
返回[self-generateDsiaplyableStrings].count;
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
NSArray*项=[自生siaplyablestrings];
UITableViewCell*单元格=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1重用标识符:nil];
cell.textlab.text=项[indexPath.row];
返回单元;
}
@结束

如果使用约束,例如,顶部标签应具有前导、尾随和顶部到超级视图

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

现在,下一个标签最好在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
@接口TableViewController()
@属性(非原子,强)NSString*名称;
@属性(非原子,强)NSString*lastName;
@属性(非原子,强)NSString*companyName;
@属性(非原子,强)NSString*address1;
@属性(非原子,强)NSString*address2;
@属性(非原子,只读)BOOL isaddress 2显示;
@属性(非原子,只读)BOOL是公司名称;
@结束
@TableViewController的实现
-(NSArray*)生成的SiaplyableString{
NSMUTABLEARRY*array=[[NSMUTABLEARRY 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];
返回数组;
}
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节{
返回[self-generateDsiaplyableStrings].count;
}
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{
NSArray*项=[自生siaplyablestrings];
UITableViewCell*单元格=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1重用标识符:nil];
cell.textlab.text=项[indexPath.row];
返回单元;
}
@结束

嗨,Joel,为什么不尝试在“表视图”单元格中使用“堆栈视图”并设置

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

stackview和tableview将为您处理一切。

嗨,Joel,您为什么不尝试在table view单元格中使用stack view并设置

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

stackview和tableview将为您处理所有事情。

您是否使用stack view和Operate约束来处理tridso@Geet我怎么做,你能给我一个参考吗?试试这个:StackView将是最好的方法你有没有使用stack view&manipu的trid