質問編集履歴

3 文の修正

teck

teck score 19

2017/03/17 09:27  投稿

[Swift3]TextFieldをタップしてPickerViewを表示させた際の挙動
###実現したいこと
TextFieldをタップしてPickerViewを表示させても、
スペースができないようにしたい
###現状
tableViewの上部を、下にスクロールした時は固定で、上にやったら上に行く。という処理をしたく、下に記載しているURL先を参考に実装しております。
画面上部に配置しているアイテム類(LabelのAからNavigationbarのTESTまで)をsubView内に配置して、そのsubViewをtableViewに挿入しております。
スクロール自体は問題ないのですが、
画面に配置しているPickerViewを使用したTextFieldをタップするとレイアウトがおかしくなり、スペースができてしまいます。
画面をスクロールさせるともとに戻ります。  
参考元
[http://qiita.com/mochizukikotaro/items/f48559630a639e7d467b](http://qiita.com/mochizukikotaro/items/f48559630a639e7d467b)
###プログラム
```ここに言語を入力
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIPickerViewDelegate,UIPickerViewDataSource {
   @IBOutlet weak var tableView: UITableView!
   @IBOutlet weak var subView: UIView!
   var displayWidth: CGFloat!
   var displayHeight: CGFloat!
override func viewDidLoad() {
       super.viewDidLoad()
       
       self.tableView.delegate = self
       self.tableView.dataSource = self
       displayWidth = self.view.frame.width
       displayHeight = self.view.frame.height
       tableView.frame = CGRect(x:0, y:0, width: displayWidth, height: displayHeight)
       tableView.contentInset.top = 295
       tableView.addSubview(subView)
- 省略 - (PickerViewの実装)
    /*
    スクロール時
    */
   func scrollViewDidScroll(_ scrollView: UIScrollView) {
       
       
       if scrollView.contentOffset.y < -295 {
           self.subView.frame = CGRect(x: 0, y: scrollView.contentOffset.y, width: self.displayWidth, height: 295)
       }
    }
```
- 起動時
![イメージ説明](575f963c8a3c32702ec1a87e8f82735c.png)
- TextFieldをタップ
![イメージ説明](389dff9b9f726c9525bc4da811e1e09d.png)
- 閉じるをタップ
![イメージ説明](f91fd9d09c601bd19660601ce85b0cc7.png)
  • iOS

    4574 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    4814 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    8559 questions

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

2 文の修正

teck

teck score 19

2017/03/16 14:00  投稿

[Swift3]TextFieldをタップしてPickerViewを表示させた際の挙動
###実現したいこと
TextFieldをタップしてPickerViewを表示させても、
スペースができないようにしたい
###現状
tableViewの上部を、下にスクロールした時は固定で、上にやったら上に行く。という処理をしたく、下に記載しているURL先を参考に実装しております。
画面上部に配置しているアイテム類をsubView内に配置して、そのsubViewをtableViewに挿入しております。
画面上部に配置しているアイテム類(LabelのAからNavigationbarのTESTまで)をsubView内に配置して、そのsubViewをtableViewに挿入しております。
スクロール自体は問題ないのですが、
画面に配置しているPickerViewを使用したTextFieldをタップするとレイアウトがおかしくなり、スペースができてしまいます。
参考元
[http://qiita.com/mochizukikotaro/items/f48559630a639e7d467b](http://qiita.com/mochizukikotaro/items/f48559630a639e7d467b)
###プログラム
```ここに言語を入力
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIPickerViewDelegate,UIPickerViewDataSource {
   @IBOutlet weak var tableView: UITableView!
   @IBOutlet weak var subView: UIView!
   var displayWidth: CGFloat!
   var displayHeight: CGFloat!
override func viewDidLoad() {
       super.viewDidLoad()
       
       self.tableView.delegate = self
       self.tableView.dataSource = self
       displayWidth = self.view.frame.width
       displayHeight = self.view.frame.height
       tableView.frame = CGRect(x:0, y:0, width: displayWidth, height: displayHeight)
       tableView.contentInset.top = 295
       tableView.addSubview(subView)
- 省略 - (PickerViewの実装)
    /*
    スクロール時
    */
   func scrollViewDidScroll(_ scrollView: UIScrollView) {
       
       
       if scrollView.contentOffset.y < -295 {
           self.subView.frame = CGRect(x: 0, y: scrollView.contentOffset.y, width: self.displayWidth, height: 295)
       }
    }
```
- 起動時
![イメージ説明](575f963c8a3c32702ec1a87e8f82735c.png)
- TextFieldをタップ
![イメージ説明](389dff9b9f726c9525bc4da811e1e09d.png)
- 閉じるをタップ
![イメージ説明](f91fd9d09c601bd19660601ce85b0cc7.png)
  • iOS

    4574 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    4814 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    8559 questions

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

1 文の修正

teck

teck score 19

2017/03/16 13:51  投稿

[Swift3]TextFieldをタップしてPickerViewを表示させた際の挙動
###実現したいこと
TextFieldをタップしてPickerViewを表示させても、
スペースができないようにしたい
###現状
tableViewの上部を、下にスクロールした時は固定で、上にやったら上に行く。という処理をしたく、下に記載しているURL先を参考に実装しております。
画面上部に配置しているアイテム類をsubView内に配置して、そのsubViewをtableViewに挿入しております。
スクロール自体は問題ないのですが、
画面に配置しているPickerViewを使用したTextFieldをタップするとレイアウトがおかしくなり、スペースができてしまいます。
参考元
[http://qiita.com/mochizukikotaro/items/f48559630a639e7d467b](http://qiita.com/mochizukikotaro/items/f48559630a639e7d467b)
###プログラム
```ここに言語を入力
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIPickerViewDelegate,UIPickerViewDataSource {
   @IBOutlet weak var tableView: UITableView!
   @IBOutlet weak var subView: UIView!
   var displayWidth: CGFloat!
   var displayHeight: CGFloat!
override func viewDidLoad() {
       super.viewDidLoad()
       
       self.tableView.delegate = self
       self.tableView.dataSource = self
       displayWidth = self.view.frame.width
       displayHeight = self.view.frame.height
       tableView.frame = CGRect(x:0, y:0, width: displayWidth, height: displayHeight)
       tableView.contentInset.top = 295
       tableView.addSubview(subView)
- 省略 - (PickerViewの実装)
    /*
    スクロール時
    */
   func scrollViewDidScroll(_ scrollView: UIScrollView) {
       
       // 下に引っ張ったときは、ヘッダー位置を計算して動かないようにする(★ここがポイント..)
       
       if scrollView.contentOffset.y < -295 {
           self.subView.frame = CGRect(x: 0, y: scrollView.contentOffset.y, width: self.displayWidth, height: 295)
       }
    }
```
- 起動時
![イメージ説明](575f963c8a3c32702ec1a87e8f82735c.png)
- TextFieldをタップ
![イメージ説明](389dff9b9f726c9525bc4da811e1e09d.png)
- 閉じるをタップ
![イメージ説明](f91fd9d09c601bd19660601ce85b0cc7.png)
  • iOS

    4574 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    4814 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    8559 questions

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

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