質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

iOS

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

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Xcode

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

Swift

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

Q&A

解決済

1回答

3291閲覧

picker が画面からはみ出してしまう

退会済みユーザー

退会済みユーザー

総合スコア0

RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

iOS

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

UI

UIはUser Interfaceの略であり、人間がコンピュータとやりとりをするためのシステムです。

Xcode

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

Swift

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

0グッド

1クリップ

投稿2019/08/31 07:30

編集2019/09/05 02:11

やりたいこと

iOS XR 以外の機種でも、pickerが画面に収まるように表示させたい。

現状

RxSwift で書いており、基本的に storyboard を使用しています。
picker は呼び出されてはいるのですが、XR以外の機種だと画像のように見切れてしまいます。
(見にくいですが、SEでのスクリーンショットです)

イメージ説明
イメージ説明
イメージ説明

pickerXibUIViewに呼び出しています。

<pickerについて>
picker の xib は、viewtoolbarpicker viewを置き、toolbarcancel,doneボタンを設置しています。
autolayout での制約は、上下左右につけています。heightの制約はつけていますがwidthの制約はつけていません。

<呼び出しているuiviewについて>
autolayoutでの制約は、下・左右とheightにつけています。
また、aspect to fill設定にしています。

また、呼び出しているVCでは、viewDidLoad()にて

genrePickerView.updateConstraints() genrePickerView.delegate = self

を書いています。
なぜ、見切れてしまうのでしょうか??
よろしくお願いします。

補足

制約のスクリーンショットです。
イメージ説明
イメージ説明
イメージ説明

解決方法

Xib の大元の View の AutolayoutAutoresizingの付け忘れでした。
修正依頼をくださった方々、またご回答くださった方 誠にありがとうございました。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakuyaAso

2019/08/31 13:16

スクショではどの部分か全くわかりませんが AutoLayoutもつけているので Pickerのドラムの見え方の仕様かと。 X系はSafeAreaの影響でちゃんと見えるのかな。
退会済みユーザー

退会済みユーザー

2019/09/01 03:44

スクリーンショット画像の差し替えをしました。 見やすくなったかと思います。
unhappychoice

2019/09/01 20:00

制約に問題がありそうですが、その部分のコードか、InterfaceBuilder のスクショを見ないとなんとも言えません
退会済みユーザー

退会済みユーザー

2019/09/02 15:44

昨夜、Xibの制約を弄った際に、一応 picker が動きはしたので呼び出し先での制約がうまくいっていないのかなという気がしました(勿論 違うかもしれませんが...) スクリーンショット追加致しました。よろしくお願いします!!orz
退会済みユーザー

退会済みユーザー

2019/09/02 20:10 編集

Rx は全くわからないのですが、ピッカーを描写しているUIViewのframeとViewControllerのself.viewのframeをviewDidLoadと、とりあえず(呼び出されるまで画面上にないのかな?)ViewDidLayoutSubViewsの中でprintして比較してみたらどうなりますか?まったくの的外れだったらごめんなさい。 extraViewとかだと、呼び出した際に、frameなどを設定してあげないと位置決めできなかったような記憶が
退会済みユーザー

退会済みユーザー

2019/09/03 03:01

ViewDidLayoutSubViews は使っていない気がします...(?) viewDidLoad で genrePickerViewY.constant = -genrePickerView.pickerHeight genrePickerView.updateConstraints() genrePickerView.delegate = self を呼び出していて、picker を表示させるボタンを押したときに self.genrePickerViewY.constant = 0 self.view.layoutIfNeeded() を呼び出しています。 勉強不足で大変恐縮なのですが、frameはコードでしていないのですが呼び出せるものなのでしょうか?
fuzzball

2019/09/05 01:24 編集

xibから生成したviewをUIViewに乗せるところのコードを書いて下さい。(生成〜乗せるところまで)
退会済みユーザー

退会済みユーザー

2019/09/05 02:08

申し訳ありません、解決致しましたorz autolayout の問題でした。
fuzzball

2019/09/05 02:21

参考までに、元々どのようなAutoresizingになっていたのか教えていただけませんか?(面倒ならいいです)
guest

回答1

0

ベストアンサー

現状の方法で動かすならば、

  • storyboard

autolayoutの設定で、pickerを乗せるviewのbottomの制約(genrePickerViewYってやつ?)をsuperViewのbottomから-250にしてviewを隠しておく

  • viewDidLoad

swift

1// ↓いらないので消す 2//genrePickerViewY.constant = -genrePickerView.pickerHeight 3//genrePickerView.updateConstraints()
  • view呼び出し時

swift

1self.genrePickerViewY.constant = 0 2self.view.layoutIfNeeded() 3print("self.view.frame:", self.view.frame) 4print("genrePickerVie.frame:", genrePickerView.frame)

とするとどうなるでしょうか?
なおるなら、この辺読んでみて

https://github.com/tyobigoro/tChangeViewVisiblity

投稿2019/09/03 05:21

編集2019/09/03 06:31
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/03 05:45 編集

ご回答ありがとうございます。 試してみましたが、相変わらず直らなかったです....orz (ちなみに、bottom の制約は autolayout で行っており genrePickerViewY: NSLayoutConstraint になっております orz )
退会済みユーザー

退会済みユーザー

2019/09/03 06:29 編集

呼び出し側にprintいれたのでxrとx?で試してみて。 そちらの全体像がつかめないので、サンプル置いときます。
退会済みユーザー

退会済みユーザー

2019/09/03 06:37 編集

ありがとうございます。 xr と x? がわからなかったので、とりあえずそのまま試してみました。 SEでの実行結果 self.view.frame: (0.0, 64.0, 320.0, 504.0) genrePickerVie.frame: (0.0, 254.0, 320.0, 250.0) こうなりました。 あと、見落としていたのですが、 "<project name> was compiled with optimization - stepping may behave oddly; variables may not be available." とコンソールに出ていました。
退会済みユーザー

退会済みユーザー

2019/09/03 06:56

UIViewに対してXIBが伸縮してないのかな。 ViewにXIB載せたサンプル更新しておいて起きます。
退会済みユーザー

退会済みユーザー

2019/09/03 07:10

その可能性は大きいなと思っています。 うまく連携というか制約が噛み合っていないのだろうな、という感じです。 ありがとうございます!
退会済みユーザー

退会済みユーザー

2019/09/05 01:06

結局、いただいたサンプルを見ながらやってみたのですが、うまく伸縮してくれませんでした。(完全に同じようにはできませんでしたが。)他の部品との制約の衝突のせいなのか、触っている部分のせいなのかわからない状態です。
退会済みユーザー

退会済みユーザー

2019/09/05 02:07

tyobigorou さん!すみません!!できました!Xibの大元のViewのAutoresizingの制約をつけるのを見落としておりましたorz 大変申し訳ございません。お手数おかけいたしました...!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問