ios - 我什么时候应该在 UIViews 中设置边框?

标签 ios objective-c uiview

我有一个未填满整个屏幕的 UIView,我想向该 View 添加顶部边框。但是,我不断收到以下信息:enter image description here

这是我使用的代码:

CGFloat thickness = 4.0f;
CALayer *topBorder = [CALayer layer];
topBorder.frame = CGRectMake(0, 0, self.announcementCard.frame.size.width, thickness);
topBorder.backgroundColor = [UIColor blueColor].CGColor;

我怎么知道为什么边框会超出屏幕。这是因为我将边框放在 UIViews init 方法内的 View 上。当我这样做时,self.announcementCard.frame.size.width 是 1000,因此边框会离开屏幕。 self.announcementCard.frame.size.width 的宽度和高度均为 1000。这是因为 UIView 尚未在其 init 方法中向 UIView 添加约束。

因此,我的问题是我应该什么时候调用上面编写的代码? self.announcementCard.frame.size.width 何时添加其约束并更新其框架?

最佳答案

您应该在 viewDidLoad 方法中添加 subview (或子图层)。但是,如果您使用自动布局,请保留子图层的引用并在 viewDidLayoutSubviews 方法中更新它:

- (void)viewDidLoad {
  [super viewDidLoad];

  _borderLayer = [CALayer layer];

  [self.view.layer addSublayer:_borderLayer];
}


- (void)viewDidLayoutSubviews {
  [super viewDidLayoutSubviews];

  _borderLayer.frame = CGRectMake(0, 0, self.view.bounds.size.width, 3);
}

否则,您可以简单地 clipsToBounds View 来避免 subview 超出边界可见。

self.view.clipsToBounds = YES;

关于ios - 我什么时候应该在 UIViews 中设置边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39774193/

相关文章:

iphone - 在UILabel上设置文本会导致我的应用崩溃

iphone - 我应该如何针对可能的核心数据文件损坏或加载问题进行防御性编码?

ios - 无法在 Swift 中替换字符串

ios - StartUpdateLocations在后台运行,didUpdatingToLocation仅调用10-20次

swift - 使用layoutAnchor填充 super View

ios - UItableViewCell 内 UIScrollview 中的 UIButton 处理带有数据的事件

ios - UICollectionView 单元格消失

iphone - 在 UILabel 中显示 float

IOS Swift 我在添加 subview 的 UIView 中搞砸了什么

ios - Storyboard 不接受 UIView 的某些尺寸