ios - 如何获取 View 的框架并将其设置为渐变的框架

标签 ios swift

我有一个页面控件,其中包含一些指定的 anchor ,如下所示。我想对它的背景应用渐变。但我无法获得页面控件的实际框架。谁能帮帮我。

这是工作正常的页面控件框架。

pageControl.setAnchor(top: nil, bottom: buttonsContainerView.topAnchor, left: view.leftAnchor, right: view.rightAnchor);
        pageControl.heightAnchor.constraint(equalToConstant: 30).isActive = true;

调用函数将渐变应用到页面控件。

addGradientForPageControl(view: pageControl);

页面控制代码

lazy var pageControl: UIPageControl = {
        let pc = UIPageControl();
        pc.pageIndicatorTintColor = UIColor.black;
        pc.currentPageIndicatorTintColor = UIColor.white;
        pc.numberOfPages = self.pages.count;
        pc.translatesAutoresizingMaskIntoConstraints = false;
        pc.addTarget(self, action: #selector(handlePageClick), for: .touchUpInside);
        return pc;
    }();

梯度函数。

func addGradientForPageControl(view: UIView){
        let gradient: CAGradientLayer = CAGradientLayer();
        gradient.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height);
        print(Int(view.layer.borderWidth));
        let topColor = UIColor(red: 107/255, green: 143/255, blue: 133/255, alpha: 1).cgColor;
        let bottomColor = UIColor(red: 68/255, green: 126/255, blue: 114/255, alpha: 1).cgColor;
        gradient.colors = [topColor, bottomColor];
        view.layer.addSublayer(gradient);
    }

如果我调用上面的函数,我总是得到渐变的框架为 (0,0,0,0)。这会导致背景上没有渐变。有什么方法可以通过调用 view.widthAnchor.something 来获取框架的宽度和高度来获取页面控件的框架。

最佳答案

您可能在为 View 分配框架并在屏幕上布局之前添加渐变。尝试在 viewDidLayoutSubviews() 方法中添加渐变。

关于ios - 如何获取 View 的框架并将其设置为渐变的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43437864/

相关文章:

iphone - iOS 应用程序在 appStore 上架后行为发生了变化

ios - 如何向第 3 方 iOS 库添加功能?

ios - Xcode 继续构建在 Swift 3 之上

ios - Swift 创建 UIButton 和 UIView 颜色更改的通用扩展

ios - 第一响应者在 UISearchBar 上进行平移手势

ios - CollectionView 在动画过程中切断单元格

ios - Xcode为什么无法识别这些着色器?

swift - 在一个类中引用一个类的实例数组会产生强引用循环吗?

ios - Xcode 7/swift 2.1 "Message from debugger: Terminated due to memory issue"

swift - 如何阻止 NSTextView 显示指定字体不支持的字符