将方向更改为横向单元格高度时的UITableView非常高

时间:2014-08-12 06:20:27

标签: ios uitableview ios7 storyboard

我有一个带有NavigationController和tableView的UIView。该表有1个原型单元格,包含一些标签。所有“设计”的故事板和所有约束都是自动设置的。所以我在我的应用程序中使用了10个UIViews(适用于iPhone),其中9个在纵向和横向模式下显示正确。一个对于肖像模式是好的,当转向横向时,在具有一行内容的单元格和具有20或30行内容的单元格之间存在大约300px的空间。同一个空间位于该单元格的末尾。我尝试了其他几个约束,也手动完成。我尝试了其他x / y / width / height - 标签设置但没有成功。 cell-height的代码是:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (!self.cellNews) {
        self.cellNews = [self.tableView dequeueReusableCellWithIdentifier:@"CellNews"];
    }

    theAktuellList = [app.aktuellArray objectAtIndex:indexPath.row];

    NSString *currentLanguage =
    [[NSString alloc] initWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"/Documents/sprache.txt"]
                                    encoding:NSUTF8StringEncoding error:NULL];

    if ([currentLanguage isEqual:@"de"])
    {
        self.cellNews.Titel.text = theAktuellList.TitelD;
        self.cellNews.Datum.text = theAktuellList.DatumD;
        self.cellNews.Nachricht.text = theAktuellList.NachrichtD;
        self.cellNews.Wichtig.text = theAktuellList.WichtigD;
    }
    else
    {
        if ([currentLanguage isEqual:@"fr"])
        {
            self.cellNews.Titel.text = theAktuellList.TitelF;
            self.cellNews.Datum.text = theAktuellList.DatumF;
            self.cellNews.Nachricht.text = theAktuellList.NachrichtF;
            self.cellNews.Wichtig.text = theAktuellList.WichtigF;

        }
        else
        {
            self.cellNews.Titel.text = theAktuellList.TitelE;
            self.cellNews.Datum.text = theAktuellList.DatumE;
            self.cellNews.Nachricht.text = theAktuellList.NachrichtE;
            self.cellNews.Wichtig.text = theAktuellList.WichtigE;

        }
    }

    [self.cellNews layoutIfNeeded];
    CGFloat height = [self.cellNews.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    return height;
}

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 40;
}

portrait mode

landscape mode

该应用是一款通用应用。这个UIView与tableView里面和相同的内容在Pad上没有任何问题。我的错在哪里或者我可以改变或试图解决这个问题?

由于回答Raj的编辑:

嗨Raj,谢谢你的链接。我经历了什么都没找到。但我明天再做一次。也许我没有谈论细胞及其标签。我有一个高度为45的原型单元。内部有4个标签,每个25个高度,10个顶部和10个底部约束。 “标题”有20个左右&右边,“日期”有30左和右20,“消息”有30左和右20,“Wichtig”有20左和右。它们都是一个放在另一个上面,因为在每个单元格中只使用一个标签。这意味着第一个单元格只包含Titel,第二个单元格包含Date,第三个单元格包含Message等等。每个标签的所有约束都是蓝色的,只要标签中只有一行文本,单元格就构建正确。随着每一个额外的文本行,“顶部和底部填充”正在增长。但约束设置为固定值。

EDIT 14.08.2014:

我在没有任何改变的情况下完成了教程。标签高度是“根据纵向标签宽度计算的。当旋转到横向时,标签与纵向方向的高度完全相同,但宽度增加到近两倍。结果是一个不太真实的文本高度,水平居中标签。

我添加了一个,我认为它更像是一个肮脏的技巧,而不是一个正确的解决方案,根据使用长内容的标签返回高度:

CGFloat height = [self.cellNews.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

if ([self isLandscapeOrientation]) {

    if (theAktuellList.NachrichtD == nil) {

        return height + 1;

    } else {

        return  height/1.5;

    }

} else {

    return height + 1;

}

这在“光学上”很好,我没有提示或错误,但必须有更好的方法来解决这个问题。每一个学习/思考或搜索方向的帮助都会很好。

1 个答案:

答案 0 :(得分:0)

请仔细阅读下面提到的解释动态表视图单元格高度和自动布局的教程,使用它可以获得预期的输出

http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout