【问题标题】:Removing UIView' backing layer from superLayer从 superLayer 中移除 UIView 的支持层
【发布时间】:2018-02-25 10:13:42
【问题描述】:
-(void) testLayer {

    UIView *parent = [UIView new];
    UIView *subview1 = [UIView new];
    UIView *subview2 = [UIView new];

    [parent addSubview:subview1];
    [parent addSubview:subview2];

    XCTAssertTrue(subview1.superview != nil);

    XCTAssertTrue([parent.subviews count] == 2);

    [subview1.layer removeFromSuperlayer];

    XCTAssertTrue(subview1.superview == nil);


    XCTAssertTrue([parent.subviews count] == 1); //This test case failing

}

有人能解释为什么最后一个测试用例失败了吗?我一定在这里遗漏了一些基本的东西。

我知道[subview1 removeFromSuperview] 是从 superView 中删除它的正确方法,但我有兴趣了解幕后发生的事情。

我的困惑是因为subview1.superview 在执行[subview1.layer removeFromSuperlayer] 后为零,但子视图数组中仍然包含两个子视图。

【问题讨论】:

  • 如果要删除子视图,请执行[subview1 removeFromSuperview]。删除子视图的支持层与删除子视图本身不同。

标签: ios objective-c uiview calayer


【解决方案1】:

答案很明显: [subview1.layer removeFromSuperlayer] 删除一个层,而在 parent.subviews 中,您正在调用“视图”。由于视图和层不同,因此测试用例失败。 正如 Apple 所说的 removeFromSuperlayer:

您可以使用此方法移除层(及其所有子层) 从层层次结构。此方法同时更新超级层的列表 子层和将此层的超级层属性设置为零

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2022-06-19
    • 1970-01-01
    相关资源
    最近更新 更多