質問編集履歴

1 エラー画面スクリーンショット追加

DaikiOgawa

DaikiOgawa score 15

2016/01/30 11:19  投稿

AutolayoutをMisterFusionで実装した際に、別ビューとの差での計算がエラーになる
メッセージアプリを作ろうと思い、TextFieldに文字入力をしようとした時はビューを上にずらすという動きを実装しようとしたのですが、MisterFusionの部分でエラーになってしまいます。
参考にしたURL
http://hack.aipo.com/archives/7958/
http://qiita.com/yuto_aka_ike/items/1d0cc3f7bc3aa4d4161a
https://github.com/szk-atmosphere/MisterFusion/blob/master/README.md
```Swift2
import UIKit
import MisterFusion
class MessageViewController: UIViewController, UITextViewDelegate, UITableViewDelegate{
   
   var isObserving = false
   
   var messageTextViewHeight: NSLayoutConstraint!
   var messageTextView: UITextView!
   
   var tableView: UITableView!
   var underBarView: UIView!
   var sendBtn: UIButton!
   
   override func viewWillAppear(animated: Bool) {
       // Viewの表示時にキーボード表示・非表示を監視するObserverを登録する
       super.viewWillAppear(animated)
       if(!isObserving) {
           let notification = NSNotificationCenter.defaultCenter()
           notification.addObserver(self, selector: "keyboardWillShow:"
               , name: UIKeyboardWillShowNotification, object: nil)
           notification.addObserver(self, selector: "keyboardWillHide:"
               , name: UIKeyboardWillHideNotification, object: nil)
           isObserving = true
       }
   }
   override func viewDidLoad() {
       
       //メッセージ表示テーブルView
       //let frame_tableView:CGRect = CGRect(x: x, y: y, width: width, height: height)
       tableView = UITableView()
       //tableView.backgroundColor = .redColor()
       //tableView = UITableView()
       tableView.delegate = self
       //self.view.addSubview(tableView)
       
       underBarView = UIView()
       
       //メッセージ表示テーブルadd
       self.view.addLayoutSubview(tableView, andConstraints:
           tableView.Top |-| 0,
           tableView.Right |-| 0,
           tableView.Left |+| 0,
       /*
       エラーになる部分はじまり
       */
           tableView.Bottom |==| underBarView.Top |-| 0
       /*
       エラーになる部分おわり
       */
       /*
       これに変えればエラーにならない はじまり
       */
           //tableView.Bottom |-| 50
       /*
       これに変えればエラーにならない おわり
       */
       )
       print("メッセージ表示テーブルAdd成功")
       
       //下部裏のView
       underBarView = UIView()
       //self.view.addSubview(underBarView)
       underBarView.frame.size.height = 50
       underBarView.backgroundColor = UIColor .redColor()
       
       //メッセージ入力欄
       messageTextView = UITextView()
       messageTextView.delegate = self
       self.underBarView.addSubview(messageTextView)
       
       //送信ボタン
       sendBtn = UIButton()
       messageTextViewHeight = NSLayoutConstraint()
       self.underBarView.addSubview(sendBtn)
       
       //下部裏親のViewAdd
       self.view.addLayoutSubview(underBarView, andConstraints:
           underBarView.Top |==| tableView.Bottom |+| 0,
           underBarView.Right |-| 0,
           underBarView.Left |+| 0,
           underBarView.Bottom |-| 0
       )
       print("下部親View Add成功")
             
   }
   func textViewDidChange(textView: UITextView) {
       let maxHeight = 80.0 // 入力フィールドの最大サイズ
       if(messageTextView.frame.size.height.native < maxHeight) {
           let size:CGSize = messageTextView.sizeThatFits(messageTextView.frame.size)
           messageTextViewHeight.constant = size.height
       }
   }
   override func viewWillDisappear(animated: Bool) {
       // Viewの表示時にキーボード表示・非表示時を監視していたObserverを解放する
       super.viewWillDisappear(animated)
       if(isObserving) {
           let notification = NSNotificationCenter.defaultCenter()
           notification.removeObserver(self)
           notification.removeObserver(self
               , name: UIKeyboardWillShowNotification, object: nil)
           notification.removeObserver(self
               , name: UIKeyboardWillHideNotification, object: nil)
           isObserving = false
       }
   }
   func keyboardWillShow(notification: NSNotification?) {
       // キーボード表示時の動作をここに記述する
       let rect = (notification?.userInfo?[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
       let duration:NSTimeInterval = notification?.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as! Double
       UIView.animateWithDuration(duration, animations: {
           let transform = CGAffineTransformMakeTranslation(0, -rect.size.height)
           self.view.transform = transform
           },completion:nil)
   }
   func keyboardWillHide(notification: NSNotification?) {
       // キーボード消滅時の動作をここに記述する
       let duration = (notification?.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as! Double)
       UIView.animateWithDuration(duration, animations:{
           self.view.transform = CGAffineTransformIdentity
           },
           completion:nil)
   }
}
```
TableViewを上にずらしたいので、TableViewのBottomの値を下の文字入力エリアにくっつけるようにしたいのですが、そのようなコードを書くとエラーになってしまいます。
よろしくお願いします。
よろしくお願いします。
![イメージ説明](f8e82e13f834b9139c366711cfb3990f.png)
  • Swift

    14598 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Swift 2

    1356 questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る