获取控件结束位置的x / y帧坐标

时间:2015-04-07 21:58:04

标签: ios objective-c uitableview

我目前正在返回UITableViewCell*,看起来像这样

Image --- Text ---  Button --- Image

我使用的代码看起来像这样

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *simpleTableIdentifier = @"SimpleTableItem";


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];



    if (cell == nil) {


        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 

    }


    cell.textLabel.text = [self.tableData objectAtIndex:indexPath.row];            //Add cell text

    cell.imageView.image = [UIImage imageNamed:@"Test.jpeg"];                      //Add cell image

    float f = [cell.textLabel alignmentRectInsets].right;



    UIButton *scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];  //ADD UIButton

    scanQRCodeButton.frame = CGRectMake(?, ?, 50.0f, 50.0f);                     //Coordinates for image view

    [scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal];

    [cell.contentView addSubview:scanQRCodeButton];



    UIImageView *preArrowImage =[[UIImageView alloc]init ];                     //ADD Image View

    preArrowImage.image =[UIImage imageNamed:@"Test.jpeg"];

    preArrowImage.frame = CGRectMake(?, ?, 10, 30);                             //Coordinates for image view

    [cell.contentView addSubview:preArrowImage];



    return cell;
}

如前所述,这就是TableViewCell的样子

 ImageA --- Text ---  Button --- ImageB

我正在使用以下

在TableViewCell中对齐我的按钮
 scanQRCodeButton.frame = CGRectMake(?, ?, 50.0f, 50.0f);

我正在使用以下

对齐UIImageView
 preArrowImage.frame = CGRectMake(?, ?, 10, 30);  

现在我的问题是,实际上我使用的是硬编码变量而不是?。如何找出文本结束位置的x帧坐标,以便我可以利用该值而不是硬编码。

1 个答案:

答案 0 :(得分:3)

首先,您的代码存在一些问题。每次重复使用单元格时,您都会将子视图添加到单元格contentView中。该代码应该在if (cell == nil)主体中,以便它只发生一次。当然,您需要通过使用带有专用变量的UITableViewCell子类或通过设置标记来对这些子视图进行引用。

接下来,一般来说,你可以做类似的事情:

CGFloat labelRightEdge = CGRectGetMaxX(textLabel.frame);

我不确定它是否会在这种情况下起作用,并且当您尝试将内容与UITableViewCell内置视图对齐时会导致问题。这些视图在内部布局,并不真正意味着与自定义子视图一起使用。我建议您通过创建UITableViewCell子类来自己构建所有视图,然后根据layoutSubviews的内容布置所有视图。