UIScrollViewがかなり奇妙に動作しているので、今私はかなり困惑しています。UIScrollView UITextField/UIPickerViewで奇妙な振る舞い
基本的に、iOSチャートを使用してグラフを表示するために使用しているiPhone 6の高さの約2倍のUIScrollViewがあるため、スクロールして垂直に跳ね返ることができるように設定しましたが、水平にも跳ねません。すべてのグラフ、およびいくつかの追加のUITextFieldとUILabelsは、一般的なように見えるUIScrollViewのフレームに合わせて別の「ボディビュー」に埋め込まれています。このように、私のビューの階層は次のようになります。私は今日に気づいまで
これはうまく働いている私はUIPickerView、私のスクロールビューの突然のすべてをトリガーこのUIScrollViewの上の特定のUITextFieldを押したとき水平方向のバウンスが可能になります。この動作は、タップされたときにボディビュー上の他の2つのUITextFieldに対しては発生しません。
影響を受けるテキストフィールドをタップすることでトリガーされているコードをすべて確認しましたが、UIオブジェクトのフレームまたは境界を直接編集するものはありません。実際に、テキストフィールドがタップされたときに呼び出される唯一の関数はtextFieldDidBeginEditing
です。私はこの関数のコードを以下に添付しましたが、問題ではないことはかなり確信しています。
私の次の疑惑は、UIPickerViewのポップアップがスクロールビューや埋め込みビューのディメンションを乱していたことでした。私はこれが可能であるかどうか確かではありませんが、この全体が私をかなり困惑させてしまいました。ここで
は私のコードです:ここで
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == overallTimeframeTextField {
...
// Not the problematic text field
} else if textField == subjectTimeframeTextField {
...
// Also not the problematic text field
} else { // Affected text field
// Set the text of the text field
if textField.text == "" {
// This is executed in this scenario
textField.text = subjectPickerData[0]
} else {
...
}
}
}
は私の問題を概説短いGIFです。あなたは私が水平に跳ね返ることができないページをスクロールダウンし、次にテキストフィールドにタグを付けると、突然スクロールビューがバウンスを許すのを見ることができます。
私はかなりこの問題に迷ってしまいましたので、任意の助けいただければ幸いです。明確にするために
編集
、私は明示的に所望の高さと、ユーザーがオンになっていることを画面の幅に等しくなるように、私のscrollViewのコンテンツのサイズを宣言します。 bodyViewの幅を同じ値に設定します。これは、次のコードでviewDidAppear
で行われます。
// Fit the content to the screen
scrollView.contentSize = CGSize(width: UIScreen.main.bounds.width, height: 1200)
bodyView.frame.size.width = UIScreen.main.bounds.width
私も両方にscrollviewと身体ビューを強制的制約が私の階層内のUIViewControllerのデフォルトの子ビュー(スクロールビューの親と同じ幅を持っています)。
私が気づいた一つ興味深いのは、私は時にビュー負荷私のスクロールビューの幅と私の体のビューを印刷するとき、私はiPhone 6のために次の出力を受け取ることです:
385.0
385.0
これはiPhone 6の幅と同じです。しかし、私はテキストフィールドをタップして、同じ値を印刷するとき、私はこの出力を得る:
385.0
384.0
ので、いくつかの理由で、私の体のビューが1であります私のスクロールビューよりも小さいポイント。私はviewDidAppear
関数のように、テキストフィールドをタップすると、ボディビューの幅をスクロールビューと同じに設定しようとしましたが、これは効果がありませんでした。 UIPickerViewの面では
、私はそうのような私のクラスのインスタンス変数とpickerviewを初期化します。
var subjectPickerView = UIPickerView()
私はその後、viewDidLoad
でテキストフィールドの入力ビューになるこのピッカービューを割り当てる:
textField.inputView = subjectPickerView
このようにすると、ピッカービューがスクロールビューのサブビューになるかどうかはわかりませんが、このシナリオではキーボードを置き換えるだけです。
あなたのスクロールビューのバウンスは垂直ですか? – CodeChanger
@ CodeChangerはい、「バウンス」と「バウンスが縦に」は有効で、「バウンスは横に」は有効になっていません。 –
* "私はそれを設定しました...スクロールも水平方向へのバウンスもありません" *スクロールする能力は 'contentSize'に基づいています---それを明示的にまたは制約で設定していますか?あなたは* "UITextField --- UIPickerViewをトリガーする"と言う*どのようにピッカービューを表示していますか?スクロールビューのサブビューですか? – DonMag