我正在尝试显示一个问题表,但似乎无法让每个问题在UITableViewCell
的范围内开始和结束。
我已尝试将对齐设置为center
并提供textLabel.LineBreakMode = UILineBreakModeWordWrap
,但似乎无法解决我当前的问题。
以下是我设置UITableView
的方法:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"MyCustomCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.textAlignment = UITextAlignmentCenter;
cell.textLabel.numberOfLines = 0;
}
Questions *que = [survey.questions objectAtIndex:indexPath.row];
NSLog(@"Que Value: %@\n", que);
cell.textLabel.numberOfLines = 0;
cell.textLabel.text = (NSString *)que;
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 100.0;
}
答案 0 :(得分:0)
您没有正确地给出标签框。 标签必须具有前导和尾随约束或固定宽度。
答案 1 :(得分:0)
您需要在单元格内正确约束标签。覆盖UITableViewCell
(init(style:reuseIdentifier:)
)的指定初始值设定项,并添加以下约束:
或者,在自定义UITableViewCell子类的nib文件中执行此操作。
这将使标签适合单元格的边界,仅适用于左右。如果您希望单元格也垂直放置,请执行相同的上下方。您甚至可以通过这种方式根据标签文本动态调整单元格的大小。
此外,您不再需要if (cell == nil) {
,因为dequeueReusableCellWithIdentifier:forIndexPath
可以保证返回非零小区。
答案 2 :(得分:0)
由于表视图约束,您正面临此问题。正确设置表视图约束,即相对于superview的前/后顶/底。这将解决您的问题。所有约束的常量值都应为0.
答案 3 :(得分:0)
由于您没有提供CustomCell
代码,我假设您是通过代码进行的。
只需覆盖方法initWithStyle:reuseIdentifier
,就像这样:
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
[self loadView];
}
return self;
}
和loadView
方法你应该实例化你的textLabel
做你想要的任何配置并创建尾随和前导约束,该方法应该是
- (void)loadView
{
// Do whatever configuration of textLabel
NSDictionary *views = NSDictionaryOfVariableBindings(self.textLabel);
[self.textLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[self.textLabel]-|" options:0 metrics:nil views:views]];
}
我建议您阅读有关AutoLayout的信息
_编辑_
如果您没有使用子类或CustomCell
,则可以向tableView:cellForRowAtIndexPath:
添加相同的代码,仅针对cell.textLabel
更新,以便类似:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Do whatever configuration of textLabel
NSDictionary *views = NSDictionaryOfVariableBindings(cell.textLabel);
[cell.textLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[self.textLabel]-|" options:0 metrics:nil views:views]];
return cell;
}