【问题标题】:how do i get a layer's frame to automatically resize based on its superlayer's frame or its view's frame?如何让图层的框架根据其超级图层的框架或其视图的框架自动调整大小?
【发布时间】:2011-02-24 07:16:20
【问题描述】:

我正在尝试使用 cagradientlayer 在我们的应用程序中绘制渐变,而不是让 uiview 的子类管理渐变。我遇到的一个问题是,当将渐变作为其主层的子层的视图调整大小以适应我要显示的数据时,该层不会随之调整大小。我最终使渐变层以原始帧大小结束,而我的视图的帧要大得多。

有没有办法让子层自动调整大小以适应其超层的框架或超层的视图框架?

【问题讨论】:

    标签: iphone objective-c core-animation calayer


    【解决方案1】:

    在视图的子类中实现layoutSubviews。它在调整框架大小时(或调用 setNeedsLayout 时)被调用。只需将图层的框架设置为视图的边界:

    -(void)layoutSubviews
    {
        someSubview.frame = self.bounds;   // make the subview frame match its view
    }
    

    【讨论】:

    • 我希望根本不需要子类,但是 CALayers 中可能存在的一些功能我似乎找不到可以为我做这件事(子类化一个层并没有超出不过这个问题)。
    • 如何调整视图大小?我通过设置框架来调整视图的大小,并且从来不需要调整图层的大小。
    • 我在某些情况下设置框架,而在其他情况下让视图自动调整大小。我认为问题可能是当我手动调整视图大小时,我关闭了子视图的自动调整大小,这样子视图本身就不会调整大小;这可能是我的问题。
    【解决方案2】:

    这样会更好

    -(void)viewWillLayoutSubviews
    

    【讨论】:

    • 比什么好?为什么?请确保提供完整的答案。
    • 我认为更好的是它实际上会做这里的预期。
    • 在我问这个问题的时候,我不认为 UIViewController 有那个方法。我同意,如果您的视图是由 uiviewcontroller 管理的库存视图,那么您希望这样做而不是 UIView 子类中的 layoutSubviews。
    • 如果您喜欢我的回答,请确保您点击了“喜欢”按钮。帮助一堆。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多