Ios 自动布局-在表格单元格中对齐视图
我目前正在将iOS应用程序移植到autolayout,发现了一个无法解决的问题。问题在于Ios 自动布局-在表格单元格中对齐视图,ios,uitableview,autolayout,Ios,Uitableview,Autolayout,我目前正在将iOS应用程序移植到autolayout,发现了一个无法解决的问题。问题在于UITableView 表格非常简单: 每个单元格包含两个标签,标签之间有水平间距 我希望第一个标签根据内容自动调整大小 我希望所有单元格中的标签具有相同的宽度 第1点。二,。很简单,但我不知道如何创建约束,强制不同单元格中的视图具有相同的大小 是否有任何自动布局解决方案,或者我必须手动设置框架?我将通过创建带有两个标签的自定义单元类来实现这一点。为左标签指定宽度约束(以及单元格左边缘和中心的约束),为右标签
UITableView
表格非常简单:
是否有任何自动布局解决方案,或者我必须手动设置框架?我将通过创建带有两个标签的自定义单元类来实现这一点。为左标签指定宽度约束(以及单元格左边缘和中心的约束),为右标签指定左标签的水平间距约束。将IBOutlet设置为两个标签,并将其中一个设置为左侧标签的宽度约束(在我的示例中,我将其称为widthCon)。在我的例子中,我给了两个标签一个背景色,这样我就可以看到宽度。我计算viewDidLoad中最长字符串的宽度,然后使用该数字调整cellForRowAtIndexPath中宽度约束的常数:
@interface TableController ()
@property (strong,nonatomic) NSArray *theData;
@property (nonatomic) CGFloat maxWidth;
@end
@implementation TableController
- (void)viewDidLoad {
[super viewDidLoad];
self.theData = @[@"One",@"Two",@"Three Hundred Forty",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine"];
self.maxWidth = 0;
for (NSString *s in self.theData) {
CGSize stringSize = [s sizeWithFont:[UIFont systemFontOfSize:17]];
if (stringSize.width > self.maxWidth) self.maxWidth = stringSize.width;
}
[self.tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.theData.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.widthCon.constant = self.maxWidth;
cell.leftLabel.text = self.theData[indexPath.row];
return cell;
}
1和3如何兼容?是否希望所有标签都是任何单元格中最长文本的宽度?你的意思是你也希望左右标签的大小相同吗?@rdelmar完全正确。我希望所有左边的标签都具有最长文本的宽度。我唯一的想法是在表外有一个隐藏视图,并为此视图和每个单元格中的左标签添加宽度约束(以代码形式)。是否确实要3?您是否考虑过边缘案例,例如您是否需要一个附件视图或一行上的删除按钮?@Maarten这些案例我不感兴趣(甚至滚动也不感兴趣)。无论如何,附件视图或删除按钮不应该是一个问题。