iOS - 表格单元格未在设备旋转时重新绘制

时间:2013-05-17 00:42:06

标签: iphone ios ipad uitableview

所以我有一个应用程序,我正在尝试优化所有方向。但是我遇到了表格视图和自动旋转的问题。这是它在Portrait中的样子:

Portrait

现在,当我旋转设备时,它看起来像这样:

Landscape bad

但是,当我触摸桌子时,它会自行修复并看起来像这样:

Landscape good

那么,如何在旋转视图时自动实现,而不是等待用户点击桌面?谢谢!

我尝试使用以下代码但没有成功:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation {    
    [self.tableView reloadData];
}

3 个答案:

答案 0 :(得分:1)

所以问题不在于表格,而在于我正在使用的遮罩层。看起来CALayers不支持自动调整,所以我使用以下代码:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation {    
    maskLayer.frame = self.maskView.bounds;
}

旋转时没有动画。完成旋转,然后激活面具。这很奇怪,但它对我有用。如果有人有更好的解决方案,我会删除我的答案并将其交给其他人。

答案 1 :(得分:0)

我不知道这是否与你的外观完全相同(我无法从你的照片中看出来)。细胞在桌子底部渐渐变成黑色。此代码位于UIViewController中,并将表视图添加为子视图。表格视图为蓝色背景颜色。这完全适用于轮换。

-(void)viewWillLayoutSubviews {
    self.maskGradient.frame = self.view.bounds;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    self.maskGradient = [CAGradientLayer layer];
    self.maskGradient.frame = self.view.bounds;
    self.maskGradient.colors = @[(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:1] CGColor],(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:1] CGColor],(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:.2] CGColor]];
    self.maskGradient.locations = @[@0.0f,@0.9f,@1.00f];
    self.view.layer.mask = self.maskGradient;

    // other code to populate the table
    [self.tableView reloadData];
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor clearColor];
}

答案 2 :(得分:0)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
     return YES;

    //return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

返回是需要自动转移。