UITableCell中的文本在单元格边界之外运行

时间:2015-12-11 12:04:13

标签: ios objective-c uitableview tableviewcell

我正在尝试显示一个问题表,但似乎无法让每个问题在UITableViewCell的范围内开始和结束。

我已尝试将对齐设置为center并提供textLabel.LineBreakMode = UILineBreakModeWordWrap,但似乎无法解决我当前的问题。

以下是我的意思截图: enter image description here enter image description here

以下是我设置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;
}

4 个答案:

答案 0 :(得分:0)

您没有正确地给出标签框。 标签必须具有前导和尾随约束或固定宽度。

答案 1 :(得分:0)

您需要在单元格内正确约束标签。覆盖UITableViewCellinit(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;
}