Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.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 UITableViewCell:动态单元格高度按';单元标识符';_Ios_Uitableview - Fatal编程技术网

Ios UITableViewCell:动态单元格高度按';单元标识符';

Ios UITableViewCell:动态单元格高度按';单元标识符';,ios,uitableview,Ios,Uitableview,(注意:我使用的tableView来自Parse.com iOS SDK-PFQueryTableViewController) 场景=我有一个TableViewController,它有两种不同类型的单元格(每个单元格都有自己的标识符)。查询并加载到数据源中的每个对象都会检查该对象上的键是否为true。根据结果,我将RequeueReusableCellWithIdentifier放入正确的单元格 -(PFTableViewCell *)tableView:(UITableView *)tab

(注意:我使用的tableView来自Parse.com iOS SDK-PFQueryTableViewController)

场景=我有一个TableViewController,它有两种不同类型的单元格(每个单元格都有自己的标识符)。查询并加载到数据源中的每个对象都会检查该对象上的键是否为true。根据结果,我将RequeueReusableCellWithIdentifier放入正确的单元格

-(PFTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {

    myTableViewCell *cell;

    if ([object[@"orientation"] isEqualToString:@"left"] || [object[@"orientation"] isEqualToString:@"right"]) {

        myTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    else {

        myTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell2"];
    }
这一切都很正常。每个单元格都在正确的indexath.row和所有位置加载。问题是我的tableView“行高”本身并没有为新单元格重新调整。这会导致细胞重叠,使一切变得丑陋。我可以告诉storyboard中的tableView将行高度设置为两个单元格高度中较大的一个,但这也会在单元格之间留下较大的空间,这也会使它看起来很难看

问题=我相信(如果我错了,请纠正我),我需要使用

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
方法来实现这一点。我需要帮助的地方是,我不确定如何根据我在CellForRowatineXpath方法中为每个单元格指定的“标识符”将每个单元格的高度设置为indexPath

我要找的是类似的东西(请原谅SuedoCode)

回答:我想出来了(我将下面的答案标记为已接受,因为它为我指明了正确的方向)

因为我使用的是PFQueryTableViewController,所以我要做的就是

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

    PFObject *object = [self.objects objectAtIndex:indexPath.row];

    if ([object[@"orientation"] isEqual:@"left"] || [object[@"orientation"] isEqual:@"right"]) {

        return 100;
    }

    else {

       return 200;
    }

}

首先,要记住一些事情。HeightForRowatineXpath在CellForRowatineXpath之前被调用,并简单地说,若对象位于X,则返回Y或Z

更正确的方法可能是对tableCell类进行子类化,在.h文件中设置属性,然后找出路径。。。我会给你一个肮脏的方式:)

创建一个NSMutableArray属性(不要忘记在某处/以某种方式初始化它),并基于您的数据源,使用高度A或高度B(浮点)填充它。现在,回到HeightForRowatineXpath,您可以说一些大意如下:

return (int)self.myMutableArray[indexPath.row];

你在正确的轨道上。您需要“返回SomeHeight;”,而不是self.tableView.rowHeight。对于每一行都会调用此方法,因此您将在所述索引路径处返回所述行的高度。谢谢!不过我很困惑。我在上面的“我要查找的内容”部分中键入的内容不是可运行的代码。因为不能用这种方法检查cell.identifier。我的问题是,我该如何做到这一点?请原谅我没有返回任何部分或我的问题。这不是复制粘贴。我在问题里写的。我遇到的问题并不是因为我的项目中缺少该代码。@TomTesticool,您可以做的是将
cellIdentifier
存储在您的模型中,并可以在原始模型的
–tableView:heightForRowAtIndexPath:
方法中调用它(正如您在
–tableView:cellForRowAtIndexPath:
方法中回忆起构建单元格的任何其他信息一样)。我喜欢您的肮脏建议:)。看来应该行得通。但是当我尝试它时,我得到,***-[\uu NSArrayM objectAtIndex:]:索引0超出空数组的界限。您忘记了执行self.myMutableArray=[NSMutableArray];(当有疑问时,只需在viewDidLoad:)中插入该行即可。我所做的是,.h-@property NSMutableArray*mutableArray;//viewDidLoad-MUTABLEARRY=[NSMUTABLEARRY alloc]init];//CellForRowatineXpath-[mutableArray addObject:@“floatString”];//HeightForRowatineXpath-return[[mutableArray objectAtIndex:indexPath.row]floatValue]我做了mutableArray=[NSMutableArray];它仍然是“***-[\uu NSArrayM objectAtIndex:]:索引0超出了空数组的界限”(有两种可能。一些输入错误和数组不是init(因此为null),或者一些输入错误和数组没有填充(因此为空)。你太接近了。只需在调试器中设置断点并遍历代码。第三种可能…我可能记错了,但你可能不需要分配属性数组。只需执行self.mutableArray=[NSMutableArray];
return (int)self.myMutableArray[indexPath.row];