iOS ObjectiveC - 旋转BACK到Portrait后,UIView无法正确显示

时间:2015-09-29 16:45:54

标签: ios objective-c iphone uiview rotation

我是目标C的新手,在第一次旋转到横向后旋转BACK到肖像时,我似乎无法在tableViewCell中设置正确的UIView。

我检查了几个相关的帖子,但似乎没有解决我的问题。当我打印宽度时,虽然输出不正确,但我得到了预期的结果。

我创建了一个UIView“lineView”来在我的tableView中的单元格之间添加自定义行(由于不同部分中的一些分隔符问题,这是必要的。)

以下是代码的一部分:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath {
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"anIdentifier" forIndexPath:indexPath];    

     ... Content of the cell

     UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(10, 42,tableView.bounds.size.width-20, 0.7);    
     lineView.backgroundColor = [UIColor blackColor];

     [cell.contentView addSubview:lineView];

     return cell;
}

当我运行整个程序时,我得到以下结果(从左到右:没有旋转,旋转到横向,旋转回到肖像):

enter image description here enter image description here enter image description here

图1和图2中的分隔线是正确的,但当我旋转回横向时,右侧插入消失。可能有一个简单的解决方案,但我的原始技能让我失望。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

以下是我解决问题的方法(感谢@ codedad的评论)以防任何人遇到类似的问题:

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

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"anIdentifier" forIndexPath:indexPath];    

     ... Content of the cell

    UIView *lineView = [[UIView alloc] init];
    lineView.translatesAutoresizingMaskIntoConstraints=NO;

    [cell.contentView addSubview:lineView];

    NSArray *verticalConstraints =
      [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-41.5-[lineView(0.8)]"
                                            options: 0
                                            metrics:nil
                                            views:NSDictionaryOfVariableBindings(lineView)];


    NSArray *horizontalConstraints =
      [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[lineView(>=50)]-20-|"
                                        options: 0
                                        metrics:nil
                                          views:NSDictionaryOfVariableBindings(lineView)];

    [cell.contentView addConstraints:verticalConstraints];
    [cell.contentView addConstraints:horizontalConstraints];
}

您也可以使用'constraintsWithItem'。我尝试了两种方法,它们都运行良好(https://developer.apple.com/library/prerelease/ios/documentation/AppKit/Reference/NSLayoutConstraint_Class/index.html)。

我仍然没有弄清楚为什么使用'frame'导致了最初的问题,但是使用NSLayoutconstrainClass似乎是一种更安全,更可靠的方法。