0

我有 UIImageView,我在 UITableView CellforRowAtIndexPath 中创建的 UILabel,因为我需要每个单元格中的所有这些,所以我添加到我的 cell.contentview 中。但现在在处理横向方向方面面临问题。由于我在 CellforRowAtIndexPath 中定位了图像和标签,因此在为横向旋转时也获得了相同的位置(纵向)。我的代码,

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

    imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(680, 60, 40, 40)];
    [imgView1 setImage:[UIImage imageNamed:@"Downloaded.png"]];

      if([[[appDelegate selectDB] valueForKey:@"bookname"] containsObject:[listOfBooks objectAtIndex:indexPath.row]] )
      {
            [cell.contentView addSubview:imgView1];
      }
}

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

      [self handleInterfaceRotationForOrientation:toInterfaceOrientation];

 if (toInterfaceOrientation==UIInterfaceOrientationLandscapeRight) 
 {
      imgView1.frame = CGRectMake(890,0, 40, 40);
 }
 else if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft) 
 {
      imgView1.frame = CGRectMake(890,0, 40, 40);
 }
 else if (toInterfaceOrientation==UIInterfaceOrientationPortrait)
 {
      imgView1.frame = CGRectMake(690, 60, 40, 40);
 }
 else 
 {
      imgView1.frame = CGRectMake(690, 60, 40, 40);
 }
}

我也试过这个,

UIInterfaceOrientation orientation =  [[UIDevice currentDevice] orientation];

    if(orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        imgView = [[UIImageView alloc] initWithFrame:CGRectMake(150,20,125,163)];
        imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(680, 60, 40, 40)];//self.view.bounds.size.width-
        [imgView1 setImage:[UIImage imageNamed:@"Downloaded.png"]];
        Label = [[UILabel alloc] initWithFrame:CGRectMake(300, 60, 370, 28)];
        subtitleLabel=[[UILabel alloc]initWithFrame:CGRectMake(300,88 , 200, 23)];
        subtitleLabel1=[[UILabel alloc]initWithFrame:CGRectMake(395,88 , 200, 23)];
    }
    else
    {
        imgView = [[UIImageView alloc] initWithFrame:CGRectMake(230,50,125,163)];
        imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(930, 60, 40, 40)];
        [imgView1 setImage:[UIImage imageNamed:@"Downloaded.png"]];
        Label = [[UILabel alloc] initWithFrame:CGRectMake(420, 60, 370, 28)];
        subtitleLabel=[[UILabel alloc]initWithFrame:CGRectMake(420,88 , 200, 23)];
        subtitleLabel1=[[UILabel alloc]initWithFrame:CGRectMake(515,88 , 200, 23)];
    }

当我尝试使用上述方法时,即使是纵向,我也只能获得横向位置。这里做错了什么?有人能帮我吗?提前非常感谢。

4

1 回答 1

0

如果我正确阅读了您的代码(看起来有点不合适,但我想我得到了图片),您正试图在设备旋转时更改图像位置。在我看来,您的第二组代码应该可以工作,但我不知道您将该部分代码放在项目中的什么位置。只有当你把它放在正确的地方时它才会起作用。我会做这样的事情:

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

    UIInterfaceOrientation orientation =  [[UIDevice currentDevice] orientation];

    if(orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        imgView = [[UIImageView alloc] initWithFrame:CGRectMake(150,20,125,163)];
        imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(680, 60, 40, 40)];//self.view.bounds.size.width-
        [imgView1 setImage:[UIImage imageNamed:@"Downloaded.png"]];
        Label = [[UILabel alloc] initWithFrame:CGRectMake(300, 60, 370, 28)];
        subtitleLabel=[[UILabel alloc]initWithFrame:CGRectMake(300,88 , 200, 23)];
        subtitleLabel1=[[UILabel alloc]initWithFrame:CGRectMake(395,88 , 200, 23)];
    }
    else
    {
        imgView = [[UIImageView alloc] initWithFrame:CGRectMake(230,50,125,163)];
        imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(930, 60, 40, 40)];
        [imgView1 setImage:[UIImage imageNamed:@"Downloaded.png"]];
        Label = [[UILabel alloc] initWithFrame:CGRectMake(420, 60, 370, 28)];
        subtitleLabel=[[UILabel alloc]initWithFrame:CGRectMake(420,88 , 200, 23)];
        subtitleLabel1=[[UILabel alloc]initWithFrame:CGRectMake(515,88 , 200, 23)];
    }

      if([[[appDelegate selectDB] valueForKey:@"bookname"] containsObject:[listOfBooks objectAtIndex:indexPath.row]] )
      {
            [cell.contentView addSubview:imgView1];
      }
}

因此,您正在处理cellForRowAtIndexPath:. 现在您只需要使用此代码来告诉您的 tableview 在旋转时要做什么:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{
    //self.tableView is the table containing your data
    //You can animate this with the duration passed as well.
    [self.tableView reloadData];
}

willRotateToInterfaceOrientation:调用在 IOS6 中有限制。确保在旋转设备时实际调用它。

于 2013-01-31T14:51:37.327 回答