更改方向时,更改与xib文件连接的自定义UITableViewCell中标签的位置

时间:2012-08-02 17:14:40

标签: iphone ios uitableview

我有一个自定义的UITableviewCell xib,与我的uitableview相关联,我将以这种方式进行:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MyCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"MyCustomCell" owner:self options:nil];

    cell = myCell;
    self.myCell = nil;
}

[self configureCell:cell atIndexPath:indexPath];
return cell;
}

然后当改变设备的方向时,我想改变我的自定义UITableViewCell中某个元素的位置,所以在这个方法中:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {

    CGRect myframe = CGRectMake(600, self.arrowLabel.frame.origin.y, self.arrowLabel.frame.size.width, self.arrowLabel.frame.size.height);
        self.arrowLabel.frame = myframe;
} else {

    CGRect myframe = CGRectMake(400, self.arrowLabel.frame.origin.y, self.arrowLabel.frame.size.width, self.arrowLabel.frame.size.height);
        self.arrowLabel.frame = myframe;
}
}

我更改了与我的UITableViewCell xib连接的arrowLabel的frame.origin.y和frame.origin.y但是只更改了tableview的最后一行的位置,另一行中的另一个标签保持在相同的位置,所以我的问题是我如何重新加载表视图?...我也试过[self.tableview reloadData]; ...但是不工作......任何想法?

1 个答案:

答案 0 :(得分:0)

您可能想尝试将帧更改代码放在cellForRowAtIndexPath中。基本上在那种方法中你有类似的东西:

if (portrait) {
    // use portrait frames
} else {
    // use landscape frames
}

然后在您的willRotate方法中,您可以拨打[tableView reloadData]

修改

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

for (UITableViewCell *cell in [tableView visibleCells]) {

    if (portrait) {
        CGRect myframe = CGRectMake(600, cell.arrowLabel.frame.origin.y, cell.arrowLabel.frame.size.width, cell.arrowLabel.frame.size.height);
        cell.arrowLabel.frame = myframe;
    } else {
        CGRect myframe = CGRectMake(400, cell.arrowLabel.frame.origin.y, cell.arrowLabel.frame.size.width, cell.arrowLabel.frame.size.height);
        cell.arrowLabel.frame = myframe;
    }
}
}