web-dev-qa-db-ja.com

iOS 13で壊れたMDCTextFieldのrightViewプロパティ

IOS 13では、rightViewプロパティをMDCTextFieldで使用できなくなりました。これに問題があるのは私だけですか?

正しいビュー幅はテキストフィールド全体をカバーします。ユーザーの操作を防ぎ、textViewコンテンツを非表示にします。

MDCTextFieldからUITextFieldに切り替えても問題ありません。

9
Tulleb

widthconstraintrightView/leftViewに追加します。

translatesAutoresizingMaskIntoConstraints = falseを設定することを忘れないでください

rightView.translatesAutoresizingMaskIntoConstraints = false
rightView.widthAnchor.constraint(equalToConstant: <#NeededWidth#>).isActive = true
// This is enough to make it act like before but you can set other missing constraints like height to suppress layout warnings and prevent further issues.
// rightView.widthAnchor.constraint(equalToConstant: <#HeightOfTheTextField#>).isActive = true

rightView/leftViewに不足している制約を設定しなかったため、コンソールにいくつかの自動レイアウト警告が表示される場合があります。したがって、不足している制約を追加するか、単にそれらを無視してください。

また、rightView/leftViewStackViewの一種である場合は、view内に配置してから、このビューを追加してください。

15

どうやらこれはiOS 13 Beta 5でのrightViewRect(forBounds:)の動作の変更でした。

iOS&iPadOS 13 Developer Beta 5リリースノートから

UIKit-解決された問題

IOS 13より前は、UITextFieldは、割り当てられたときにleftViewおよびrightViewのフレームが正しく設定され、決して変更されないと想定していました。 iOS 13以降、leftViewRect(forBounds :)およびrightViewRect(forBounds :)の実装は、ビューにsystemLayoutSizeFitting(:)を要求するようになりました。 iOS 13にリンクして実行するときに以前の動作を実現するには、明示的なサイズ制限をビューに追加するか、プレーンなUIViewでラップするか、ビューをサブクラス化してsystemLayoutSizeFitting(:)を実装します。 (51787798)

MDCTextField-(CGRect)rightViewRectForBounds:(CGRect)bounds関数を更新する必要があります。

3
alxlives