如何使用UiActivityIndi​​cator正确设置自定义背景视图

时间:2018-04-04 10:02:06

标签: ios uiactivityindicatorview

我的应用正在使用WKWebView加载我的网站。我需要一个带有自定义深灰色背景视图的UiActivityIndi​​cator,因为当它与我网站的内容混淆时,可能很难发现UIActivityIndi​​cator。以前,我跟着https://coderwall.com/p/su1t1a/ios-customized-activity-indicator-with-swift以编程方式创建了一个指标。但是,本教程使用的是默认白色,而我的是大白色,并带有自定义橙色。我只需要一个带有backgroundView内部指示器的backgroundView。不知何故,它一直有效,直到我注意到指示器不是那个中心,它向左上方跑了一点。请看这张图片,image

在我的iPhone 5上非常明显,等等。所以,我使用了另一种使用自动布局的方法。背景视图仍然无法正常工作。这是我的自动布局设置autolayout setup

这是我的编程部分。

    loadingView.frame = CGRect(x: 0, y: 0, width: 60, height: 60)
    loadingView.center = self.view.center
    loadingView.backgroundColor = UIColor(red:211/255,green:211/255,blue:211/255, alpha: 1)
    loadingView.clipsToBounds = true
    loadingView.layer.cornerRadius = 10

    loadingIndicator.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    loadingIndicator.isOpaque = false
    loadingIndicator.center = CGPoint(x: loadingView.frame.size.width / 2.0, y: loadingView.frame.size.height / 2.0)
    loadingIndicator.backgroundColor = UIColor.gray
    loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.whiteLarge
    loadingIndicator.color = UIColor(red:232/255,green:126/255,blue:4/255,alpha:1.0)
    loadingIndicator.hidesWhenStopped = true
    loadingView.addSubview(loadingIndicator)
    self.view.addSubview(loadingView)

我更喜欢使用自动布局。

2 个答案:

答案 0 :(得分:0)

尝试更改此代码

let loadingView = UIView()
        let loadingIndicator = UIActivityIndicatorView()
        loadingView.frame = CGRect(x: 0, y: 0, width: 60, height: 60)
        loadingView.center = self.view.center
        loadingView.backgroundColor = UIColor(red:211/255,green:211/255,blue:211/255, alpha: 1)
        loadingView.clipsToBounds = true
        loadingView.layer.cornerRadius = 10

        loadingIndicator.frame = CGRect(x: 0, y: 0, width: 37, height: 37)
                loadingIndicator.isOpaque = false
        loadingIndicator.center = CGPoint(x: loadingView.bounds.size.width / 2, y: loadingView.bounds.size.height / 2)
                loadingIndicator.backgroundColor = UIColor.gray
        loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.whiteLarge
            loadingIndicator.color = UIColor(red:232/255,green:126/255,blue:4/255,alpha:1.0)
        loadingIndicator.hidesWhenStopped = true
        loadingView.addSubview(loadingIndicator)

        loadingIndicator.tag = 500
        for subView in loadingView.subviews{
            if subView.tag == 500{
                print(subView.frame)
                print("Bounds", subView.bounds)
            }
        }
        loadingIndicator.startAnimating()
        self.view.addSubview(loadingView)

根据指标视图的样式是whiteLarge,默认情况下它是37因此更改和检查。

对于自动布局:

  1. 以60 * 60宽度和高度拖动UIView。(给出超视图的宽度,高度,水平中心,垂直中心。)
  2. 将指示器视图拖动到您的UIView中。(给您的视图提供水平中心,垂直中心。)
  3. 选择指标视图设置样式为白色大并检查其框架。(默认情况下为37,其他样式为20)。
  4. 设置下图中的约束。
  5. Image

答案 1 :(得分:0)

您的自动布局设置和您尝试的代码都没有问题 在UIActivityIndicatorView上设置自定义颜色时,偏心问题实际上似乎是一个iOS错误。

你可以自己看看。

  • 拖动基本UIActivityIndicatorView
  • 设置背景颜色
  • 将它的风格设置为"大白"
    Default Color

  • 现在设置颜色
    Custom Color

当样式为WhiteGray

时,不会发生这种情况

在Xcode 9.3 Storyboard以及带调试的模拟器>中测试它颜色混合图层 - 打开