mutAnT
mutAnT

Reputation: 464

Adding UIView in Centre of ViewController | AutoLayout

So I have created a Progress Indicator View that I am showing on API calls. I have created a custom UIView Class for it.

Now, everything works fine. But the position of view should be in centre but it's not.

I think I have the constraints right but still its not working.

Here is my code:

import Foundation
import UIKit
import UICircularProgressRing
import HGRippleRadarView


class ProgressIndicator : UIView {

    @IBOutlet weak var contentView : UIView!
    @IBOutlet weak var progressView : UICircularProgressRing!
    @IBOutlet weak var logoContainerView : UIView!
    @IBOutlet weak var rippleView : RippleView!

    static let shared = ProgressIndicator()

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    func commonInit() {
        Bundle.main.loadNibNamed("ProgressIndicator", owner: self, options: nil)
        addSubview(contentView)

    }

    public func show(controller : UIViewController) {
        setupLoadingView(controller : controller)
    }

    public func hide() {
        removeLoadingView()
    }

    private func setupLoadingView(controller : UIViewController) {

        controller.view.addSubview(self)

        // adding contrints on main view
        let leadingConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: controller.view, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 0)

        let trailingConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: controller.view, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: 0)

        let topConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: controller.view, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: 0)

        let bottomConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: controller.view, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 0)

        controller.view.addConstraints([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint])

        // adding constraints on content view

        let leadingConstraint1 = NSLayoutConstraint(item: self.contentView!, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 0)

        let trailingConstraint1 = NSLayoutConstraint(item: self.contentView!, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: 0)

        let topConstraint1 = NSLayoutConstraint(item: self.contentView!, attribute: NSLayoutConstraint.Attribute.top, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.top, multiplier: 1, constant: 0)

        let bottomConstraint1 = NSLayoutConstraint(item: self.contentView!, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: self, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: 0)

        self.addConstraints([leadingConstraint1, trailingConstraint1, topConstraint1, bottomConstraint1])


        self.setNeedsLayout()
        self.reloadInputViews()
        self.layoutIfNeeded()


    }

}

Here is the result m getting:

enter image description here

And here is the xib file screenshot

enter image description here

Upvotes: 0

Views: 75

Answers (1)

Keshu R.
Keshu R.

Reputation: 5223

You have added constraints but didnt set translatesAutoresizingMaskIntoConstraints to false.

self.translatesAutoresizingMaskIntoConstraints = false
self.contentView.translatesAutoresizingMaskIntoConstraints = false

Upvotes: 1

Related Questions