将子层添加到 view.layer 会改变框架位置?

Posted

技术标签:

【中文标题】将子层添加到 view.layer 会改变框架位置?【英文标题】:Adding sublayer to view.layer changes the frame position? 【发布时间】:2013-01-06 05:50:40 【问题描述】:

我将CALayer 作为子层添加到UIViewlayer 属性,如下所示:

_graphicLayer = [[GraphicLayer alloc] init];
        self.bounds = _graphicLayer.bounds;
        _graphicLayer.position = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
        [self.layer addSublayer:_graphicLayer];

如您所见,我更改了 _graphicLayer 的位置以说明居中的anchorPoint。添加此子层后,我注意到它正在将视图 frame 更改为 (-self.bounds.width / 2, -self.bounds.height / 2)。为什么会这样?如果我改变 _graphicLayer 的位置,我认为这只是相对于它的父视图。为什么它会影响frame 属性的视图? (而且我不想调整视图层属性或_graphicLayer 的anchorPoint。

【问题讨论】:

【参考方案1】:

你目前正在做

self.bounds = _graphicLayer.bounds;

这会改变视图的(自己的)框架,因为它会改变宽度和高度。也许你打算这样做:

_graphicLayer.bounds = self.bounds;

请参阅此处了解边界如何影响框架:Link

【讨论】:

以上是关于将子层添加到 view.layer 会改变框架位置?的主要内容,如果未能解决你的问题,请参考以下文章

子视图的子层与更高的子视图重叠

更改 UIView 的 CALayer (self.view.layer.frame = ...) 的框架似乎没有效果

将子视图推送和弹出到堆栈的问题

如何在没有视图子层的情况下运行 CoreML 模型的请求?

实体框架 6:将子对象添加到父列表与将子对象的导航属性设置为父对象

使用自动布局将子视图添加到 UITableView 不会设置其框架