2017-07-15 9 views
0

EDIT:スナップショットを追加しました。異なる.swiftファイル内別の内部の中央揃えUIViewが機能していません-programmatically-

次のように私は、UIViewクラスを持っている...

class CreateNewUserView: UIView{ 

private let subVu: UIView! = UIView() 

    func createNewUserVuLayout() -> UIView{ 
     subVu.frame.size = CGSize(width:320, height:320) 

    // adding programmatically-created buttons, labels, textfields, etc.. 

     return subVu 

    } 

// will call the function below in a different ViewController class 

func centerTheVu(superVuX:CGFloat){ 

     subVu.center.x = superVuX 
    } 

、私は次のUIViewControllerクラスを持っている...

import UIKit 

class CreateNewUserVC: UIViewController{ 

private let instanceOfCreateNewUserView = CreateNewUserView() 


    override func loadView(){ 

     super.loadView() 

     view.addSubview(instanceOfCreateNewUserView.createNewUserVuLayout()) 

// Calling the function from the UIView class now. Working perfectly! 
// the view is centered horizontally as expected.   

instanceOfCreateNewUserView.centerTheVu(superVuX: view.center.x) 

// However, if I delete the above line, the line below does not accomplish 
// the same task when I try to do the same vertically! 

     instanceOfCreateNewUserView.center.y = view.center.y 


    } 


} 

そうでない理由はあります2番目のケースで作業していますか?

instanceOfCreateNewUserView.center.y = view.center.y

また、以下は動作しません。..

instanceOfCreateNewUserView.center.y = self.view.center.y

アプリのビルドと実行される、しかし、ビューは水平に並んではなく縦にしています。

私は、コントロール要素をプログラム的に作成/整列する方法を知りたいと思っています。 enter image description here

答えて

0

あなたのビュー階層は次のようになります。

CreateNewUserVCの見解
----- subVu

CreateNewUserViewは全く関与していない、あなたは、View Controllerのビューに追加したことがありません。

フレームを移動しても、画面上のビューのレイアウトは変更されません。

+0

しかし、その場合、なぜ私は関数を実行すると動作するのですか?それでも、.centerプロパティへのアクセスを使用して動作しません..?ビューが関与していない場合、1つのアプローチではなぜ影響を受けますが、他のアプローチでは影響を受けません。 ..あなたは詳しく説明できますか?ありがとう。 –

+1

この関数は表示される 'subVu'のフレームを変更します。もう1行は 'instanceOfCreateNewUserView'のフレームを変更します。これは画面に表示されません –

+0

ありがとうございます。これは私のアプローチを修正しました。私は、クラスのインスタンスではなく、UIViewを返す関数への呼び出しを使用して変更する必要があります。ヒントを気に入ってください。 –

関連する問題