首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

clipsToBounds是如何工作的?

clipsToBounds 是一个在 iOS 开发中常用的属性,主要用于控制视图(UIView)的子视图是否会被裁剪到其父视图的边界内。这个属性通常用于控制视图的显示范围,防止子视图超出父视图的边界。

基础概念

当一个视图的 clipsToBounds 属性设置为 true(默认值)时,该视图的所有子视图如果超出了父视图的边界,那么超出的部分将会被裁剪掉,不会显示出来。如果设置为 false,则子视图可以超出父视图的边界,超出的部分仍然会显示。

相关优势

  • 控制显示范围:通过设置 clipsToBounds,可以精确控制视图的显示范围,避免子视图超出父视图的边界。
  • 优化性能:在某些情况下,裁剪子视图可以减少渲染的复杂度,从而提高性能。

类型

clipsToBounds 是一个布尔类型的属性,只有两个值:

  • true:裁剪子视图到父视图的边界。
  • false:不裁剪子视图,允许子视图超出父视图的边界。

应用场景

  • 自定义视图:在自定义视图中,经常需要控制子视图的显示范围,确保子视图不会超出父视图的边界。
  • 动画效果:在实现某些动画效果时,可能需要控制子视图的显示范围,以达到预期的视觉效果。

示例代码

以下是一个简单的示例代码,展示了如何使用 clipsToBounds 属性:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 创建一个父视图
        let parentView = UIView(frame: CGRect(x: 50, y: 50, width: 200, height: 200))
        parentView.backgroundColor = .blue
        view.addSubview(parentView)
        
        // 创建一个子视图
        let childView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
        childView.backgroundColor = .red
        parentView.addSubview(childView)
        
        // 设置父视图的 clipsToBounds 属性为 true
        parentView.clipsToBounds = true
        
        // 设置子视图的 clipsToBounds 属性为 false
        childView.clipsToBounds = false
    }
}

在这个示例中,parentViewclipsToBounds 属性设置为 true,而 childViewclipsToBounds 属性设置为 false。由于 parentViewclipsToBounds 属性为 truechildView 超出 parentView 边界的部分将被裁剪掉,不会显示出来。

参考链接

如果你有任何其他问题或需要进一步的解释,请随时告诉我!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 关于视图在切圆角时候的导致的性能下降的一些探讨

    iOS 中有的时候我们控件要做成圆形 或者是切成圆角,这个时候我们一般都会使用.layer.cornerRadius  ->  clipsToBounds = YES 的属性来切,这样完全能达到我们的效果,但是如果一个界面上需要切圆角的控件很多,并且列表很长的时候,尤其是像 tableView 那样如果每一个 cell 上都有大量的控件需要切,那么就会非常卡顿,帧数严重下降 。其实原因就是这样设置会触发离屏渲染,比较消耗性能。注意:png 图片 UIImageView 处理圆角是不会产生离屏渲染的。(ios9.0 之后不会离屏渲染,ios9.0 之前还是会离屏渲染)。这里先说下离屏渲染: ###### iOS 的渲染机制: CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区,随后视频控制器会逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。GPU 屏幕渲染有以下两种方式: On-Screen Rendering 意为当前屏幕渲染,指的是 GPU 的渲染操作是在当前用于显示的屏幕缓冲区中进行。 Off-Screen Rendering 意为离屏渲染,指的是 GPU 在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。 由以上可以看出离屏渲染需要重新开辟新的缓存空间,必定要更加消耗资源。 通过查资料目前知道了设置了以下属性时,都会触发离屏绘制: shouldRasterize(光栅化) masks(遮罩) shadows(阴影) edge antialiasing(抗锯齿) group opacity(不透明) 复杂形状设置圆角等 渐变 我用一个现有的小 DEMO 来测试下,因为这个 demo 中没有切圆角,但是有阴影,一样可以出发离屏渲染,所以效果是一样的,在 tableView 中的自定义 cell 类中我设置了阴影如图:

    05
    领券