【发布时间】:2018-05-27 08:25:19
【问题描述】:
我最近一直在与我的视图控制器进行斗争,以在 UIView 上设置正确的边框尺寸。
*edit,这是用于静态表格视图(我将其用作表单)。我知道在 .xib 中舍入单元格并重用单元格,但是我没有重用单元格,这种方法对我没有用。
我有一个带有静态表格视图的屏幕,它嵌入在UIView 中并显示在主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 设置边框层的宽度。
无论如何,我最终发现,我应该使用 viewDidLayoutSubviews 来设置我的 UI 几何图形,而不是使用 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 的正确位置(当然比从 viewDidAppear 调用更优化)。
如您所见,单元格的角落周围有一些非常明显的“扭曲”。提供的图片来自模拟器,但我在设备上尝试过,得到了相同的结果(可能在我的手机上看起来更糟)。
我不知道为什么会发生这种情况,这意味着虽然我的代码从 viewDidAppear 中取出,但它和以前一样无法使用。我假设会有一个渲染选项我可以在viewDidLayoutSubViews 中调整,但似乎找不到任何东西。非常感谢所有建议!
【问题讨论】:
-
另外值得注意的是,当代码从
viewDidLayoutSubViews设置时,应用程序的性能会受到严重影响。 -
为什么不在单元格的 layoutSubviews 方法中添加边框?
-
为什么要在控制器的 viewDidAppear 中为单元格设置边框。您可以尝试为您的单元格创建自定义类并为您的单元格设置边框。
-
@NileshMahajan 这是一个静态表格视图,我没有重用单元格,我正在创建自定义单元格(我刷掉了单元格内容)。我已经为应用程序其他部分的动态表视图做了同样的事情,一切正常。
-
@trungduc 这是一个静态表格视图,所有单元格都通过 IB 连接起来,很遗憾我不能在这里使用任何表格视图方法
标签: objective-c uitableview viewdidappear viewdidlayoutsubviews