0

我最近一直在与我的视图控制器进行斗争,以在UIView.

*编辑,这是用于静态表格视图(我将其用作表单)。我知道在 .xib 中舍入单元格并重用单元格,但是我没有重用单元格,这种方法对我没有用。

我有一个带有静态表格视图的屏幕,它嵌入在 a 中UIView并显示在 main 上View Controller。我一直遇到边框问题,就好像我在viewDidAppear添加边框的方法之前将它设置在任何地方都会使用错误的尺寸并错误地显示边框一样。这是我用来向 UIView 添加边框的方法:

- (void)createCellBorder: (UIView *)view container:(UIView *)container {
    CALayer *borderLayer = [CALayer layer];

    CGRect adjustedContainer = CGRectMake(0, 0, container.frame.size.width - 20, container.frame.size.height);

    CGRect borderFrame = CGRectMake(0, 0, (adjustedContainer.size.width), (view.frame.size.height));
    NSLog(@"VIEW DIMENSIONS FOR %@ %f, %f",view , view.frame.size.width, view.frame.size.height);
    [borderLayer setBackgroundColor:[[UIColor clearColor] CGColor]];
    [borderLayer setFrame:borderFrame];
    [borderLayer setCornerRadius:view.frame.size.height / 2];
    [borderLayer setBorderWidth:1.0];
    [borderLayer setBorderColor:[kTextColor2 CGColor]];
    [view.layer addSublayer:borderLayer];
}

注意 * 要修复单个单元格尺寸错误的错误(始终是表格中的最后一个单元格),我将根据UITableView包含的边界层设置边框层的宽度。

无论如何,我最终发现,viewDidAppear我应该使用而不是使用viewDidLayoutSubviews来设置我的 UI 几何,因为此时视图已经计算了它的尺寸。这是一种享受,我的单元格将显示为圆形边框......但是渲染本身存在问题。

首先让我们看一下从viewDidAppear.viewDidAppear 中四舍五入的单元格

一切看起来都很好,这正是我希望我的单元格看起来的样子(我已经删除了它们的内容以仅显示边框)。让我们看看我用来对单元格进行舍入的代码。

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    [self configureCells];

}

- (void)configureCells {
    [self createCellBorder:_contentCellOne container:_profileTable];
    [self createCellBorder:_contentCellTwo container:_profileTable];
    [self createCellBorder:_contentCellThree container:_profileTable];
    [self createCellBorder:_contentCellFour container:_profileTable];
    [self createCellBorder:_contentCellFive container:_profileTable];
    [self createCellBorder:_contentCellSix container:_profileTable];
    [self createCellBorder:_contentCellSeven container:_profileTable];
}

现在让我们改变我打电话configureCells的地方,看看有什么不同。

-(void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    [self configureCells];

}

改变的只是我从哪里调用这个方法。从理论上讲,这应该是配置我的 UI 的正确位置(当然比调用 from 更优化viewDidAppear)。

在 viewDidLayoutSubViews 中四舍五入的单元格

如您所见,在单元格的角落周围有一些非常明显的“失真”。提供的图片来自模拟器,但我在设备上尝试过并得到相同的结果(可能在我的手机上看起来更糟)。

我不知道为什么会发生这种情况,这意味着虽然我的代码已经从viewDidAppear. 我认为会有一个渲染选项我可以调整,viewDidLayoutSubViews但似乎找不到任何东西。非常感谢所有建议!

4

1 回答 1

2

在我看来,您应该为方法UITableViewCell内的单元格创建一个子类并配置其边框layoutIfNeeded

我已经创建了一个演示项目,您可以查看它TableViewCellBorder

于 2017-12-13T13:20:45.167 回答