How to place a subview in the center of parent view using .center?

center, frames, ios, subview, swift

Solution

Try the next code for seconds subview:

sLabel.center = CGPoint(x: sSubview.frame.width / 2, y: sSubview.frame.height / 2)

You're trying to place a label in the center, but it calculated according to the firstSbuview frame, which origin is not 0.0

Problem

I have two subviews: the purple one belongs to a main view and it works wonderful with the syntax: ``` sSubview.center = view.center ``` The orange one belongs to the purple view and the same syntax doesn't place it correctly in the center. Could you see where my mistake is? ``` Here is my code: import UIKit class ViewController: UIViewController { var sSubview = UIView() var sLabel = UILabel() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. view.backgroundColor = UIColor.lightGray } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewDidLayoutSubviews() { createSimplestSubview() } // First subview func createSimplestSubview() { sSubview = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width * 0.9, height: view.frame.height * 0.9)) sSubview.backgroundColor = UIColor.purple // just for test, to make it visible sSubview.center = view.center // that s pretty easy! view.addSubview(sSubview) createSimplestLabel() } // Second subview func createSimplestLabel() { sLabel = UILabel(frame: CGRect(x: 0, y: 0, width: sSubview.frame.width * 0.3, height: sSubview.frame.height * 0.2)) sLabel.backgroundColor = UIColor.orange // just for test, to make it visible sLabel.center = sSubview.center sLabel.text = "This label has to be centered!" sLabel.textAlignment = .center sLabel.numberOfLines = 0 sSubview.addSubview(sLabel) } ``` } Here is a screen:

Original source