2016-06-01 8 views
-1

ラベルが付いたペン先があります。このラベルは、自動レイアウトを使用して縦と横の中央に配置されています。私はUIViewというサブクラスを宣言し、その中にnibファイルをロードしました。AutoLayoutが埋め込みXibファイルで動作しない

次に、メインビューコントローラにUIViewを追加し、新しいサブクラスを割り当てました。問題は、nibファイルのラベルがビューの中央にならず、AutoLayoutの制約に従わないということです。

enter image description here

Download test project.なぜこの出来事はありますか?

+0

ラベルは青の中央に表示されているように見えます。他に何か要りますか ?あなたはそれをself.viewに集中させたいですか? –

+0

@TejaNandamuri問題は、青いビューの幅がスーパービューのサイズのちょうど半分であるため、ラベルが中央にならず、右にオフセットがあるようです。 –

+0

xibをロードした後、手動でフレームを変更し、スーパービューフレームの半分である青のビューフレームと同じにする必要があります! –

答えて

2

xibをプログラムで読み込むと、それは600x600のストーリーボードで設計されたxibの元のフレームサイズになります。カスタムビューのコンセントプロパティを作成し、xibをロードした後にそのフレームを変更してください! -

あなたのケースではあなたはそれが好きでなければならない。

import UIKit 

class CustomView: UIView { 

    @IBOutlet var testView: UIView! 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
     NSBundle.mainBundle().loadNibNamed("CustomView", owner: self, options: nil) 
     self.addSubview(self.testView) 
     self.testView.frame=CGRectMake(0, 0, self.frame.size.width, self.frame.size.height) 
     //or 
     self.testView.frame=self.bounds 
    } 
} 
3

は、ここでは、あなたのカスタムクラスを記述する必要があり方法は次のとおりです。

import UIKit 

class CustomView: UIView { 

    @IBOutlet var view: UIView! 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
     view = NSBundle.mainBundle().loadNibNamed("CustomView", owner: self, options: nil).first as! UIView 
     view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
     view.translatesAutoresizingMaskIntoConstraints = true 
     view.frame = bounds 
     self.addSubview(self.view) 
    } 
} 

はここで働い例です:

Testxibautolayout2.zip

関連する問題