Objective c viewDidLayoutSubViews中的UI代码在运行时无法正确呈现

Objective c viewDidLayoutSubViews中的UI代码在运行时无法正确呈现,objective-c,uitableview,viewdidappear,viewdidlayoutsubviews,Objective C,Uitableview,Viewdidappear,Viewdidlayoutsubviews,我最近一直在与我的视图控制器进行斗争,以便在UIView上设置正确的边框尺寸 *编辑,这是一个静态表视图,我用它作为一个表单。我知道将.xib中的单元格舍入并重用该单元格,但是我不重用单元格,这种方法对我没有用处 我有一个带有静态tableview的屏幕,它嵌入在UIView中,并显示在主视图控制器上。我的边框一直存在问题,好像我在ViewDid出现之前将其设置在任何位置。我添加边框的方法将使用错误的尺寸标注,并且边框显示不正确。以下是我用于向UIView添加边框的方法: - (void)cre

我最近一直在与我的视图控制器进行斗争,以便在UIView上设置正确的边框尺寸

*编辑,这是一个静态表视图,我用它作为一个表单。我知道将.xib中的单元格舍入并重用该单元格,但是我不重用单元格,这种方法对我没有用处

我有一个带有静态tableview的屏幕,它嵌入在UIView中,并显示在主视图控制器上。我的边框一直存在问题,好像我在ViewDid出现之前将其设置在任何位置。我添加边框的方法将使用错误的尺寸标注,并且边框显示不正确。以下是我用于向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设置边界层的宽度

无论如何,我最终发现,我应该使用viewDidLayoutSubviews来设置UI几何图形,而不是使用ViewDidDisplay,因为此时视图已经计算了其尺寸。这是一个治疗,我的细胞将显示圆形边框。。。但是,渲染本身存在问题

首先,让我们看一看从视图中取整的单元格

一切看起来都很好,这正是我希望我的单元格的外观。我删除了单元格的内容,只是为了显示边框。让我们看一下我用来对单元格进行取整的代码

-(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的正确位置,而且肯定比从ViewDidDisplay调用更优化

正如你所看到的,在细胞的角落有一些非常明显的“扭曲”。提供的图片来自模拟器,但我在一台设备上尝试过,得到的结果相同,可能在我的手机上看起来更糟


我不知道为什么会发生这种情况,这意味着,虽然我已经将代码从viewdide中删除,但它仍然像以前一样无法使用。我假设我可以在viewDidLayoutSubViews中调整渲染选项,但似乎找不到任何东西。非常感谢所有建议

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


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

同样值得注意的是,当代码从viewDidLayoutSubViews设置时,应用程序的性能会受到严重影响。为什么不在单元的layoutSubviews方法中添加边框?为什么要在控制器的ViewDidDisplay中为单元设置边框。您可以尝试为单元格创建自定义类,并为单元格设置边框。@NileshMahajan这是一个静态表视图,我不是在重用单元格,我是在创建自定义类,我清除了单元格内容。我在应用程序的其他部分对动态表视图做了同样的事情,一切都很好。@trungduc这是一个静态表视图,所有的单元格都通过IB连接,我不能在这里使用任何表视图方法,不幸的是,这将是处理动态表的一种很好的方法。事实上,在我的应用程序中,我在propper表视图中对一些单元格进行舍入时就采用了这种方法。不幸的是,因为我使用的是静态表视图,所以我无法调用任何单元格方法。好吧,虽然我最初的问题还没有真正得到回答,但我打开了您的项目,查看了您是如何将边框应用于单元格的。我把你的代码修改成了我的边界创建方法,一切似乎都好得多。现在,代码实际上可以在视图中触发,并将显示所有预期的工作。。威德!感谢演示伟大的:D.快乐的编码朋友!您应该在-layoutSubviews中配置边框,而不是-layoutifneed。