2016-03-29 14 views
0

Swift 2.0でビューのy位置を更新しようとしています。しかし、それは起こっていない。私は自動レイアウトを使用していません。ここに私のコードは次のとおりです。Swift 2.0/iOS 8.0およびiOS 9.0でUIViewフレームが更新されない

func textViewDidBeginEditing(textView: UITextView) { 
    var frame : CGRect = self.frameView.frame 
    frame.origin.y = -390 
    //self.frameView.frame = frame 
    self.frameView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height) 
    print(" frame \(self.frameView.frame)") 
} 

私はフレームを印刷するとき、それは更新された値が、変更が反映されていません示していますが。私が何が欠けているか何か手がかり?

+0

コードはあなたの 'viewDidLoad'メソッドまたは 'viewWillAppear'にありますか? viewWillAppearのコードをviewDidLoadに追加しないでください。 –

+0

storyboard/xibにビューが追加されていますか? –

+0

self.frameViewはテキストビュー –

答えて

0

私の推測では、他のコードはフレームを元に戻し、変更を上書きしていると思います。これは、あなたが期待していたフレームが見えない理由です。ビューのデバッグを使用してフレームをチェックします(xcodeのコードタブのすぐ下にある3つの矩形ボタン)。また、UIViewsetFrameメソッドのシンボリックブレークポイントを設定して、フレームが変更された場所からチェックすることもできます。

0

実行時にUIViewのフレームを変更した後で、必ず制約を更新してください。うまくいけばうまくいくはずです。

self.view .needsUpdateConstraints() 
self.view .needsUpdateConstraints() 
self.view .setNeedsLayout() 
self.view .layoutIfNeeded() 

ORあなたはストーリーボード上で右自動サイズ変更マスクを設定しているかどうかを確認後、自動レイアウトを使用していない場合。 AutoResizingMaskをプログラムで更新する必要があります。例: -

self.view.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin |  UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin |  UIViewAutoresizingFlexibleTopMargin 
+1

または、AutoLayoutを正しく使用してください:P – Fogmeister

+0

私はAutoLayoutを使用していません。私のアプリはAutoLayoutを使用していません。 – TechBee

+0

@TechBeeあなたの質問に私のコメントを見てください。あなたがアプリケーションのすべてのUIでAutoLayoutを絶対に使用していないことを明示していない場合(これは非常に難しい)、AutoLayoutを使用しています。 – Fogmeister

0

私はframeViewの代わりにビューのフレームを設定し、問題は解決しました。

関連する問題