Swift中使用MaterialComponents时如何将MDCTextField高度设为30
解决方案
MDCTextField 配合 MDCTextInputControllerOutlined 使用时,默认会为悬浮占位符、边框内边距预留固定空间,自带的内在内容大小优先级高于你在Storyboard设置的手动高度约束,所以会出现高度不符合预期的问题,按以下步骤调整即可:
- 步骤1:调整输入控制器的垂直内边距,压缩上下留白
- 步骤2:如果不需要悬浮占位符效果可直接关闭,减少额外空间占用
- 步骤3:确认手动高度约束的优先级高于文本框默认的垂直抗压缩优先级
完整修改后代码
import MaterialComponents class PageContentViewController: UIViewController { @IBOutlet weak var serviceTitleTextField: MDCTextField! private var titleTextfieldeController: MDCTextInputControllerOutlined? override func viewDidLoad() { super.viewDidLoad() titleTextfieldeController = MDCTextInputControllerOutlined(textInput: serviceTitleTextField) titleTextfieldeController?.floatingPlaceholderActiveColor = .darkGray // 调整垂直内边距,可根据实际显示效果微调数值 titleTextfieldeController?.normalTextInputVerticalInset = 4 titleTextfieldeController?.activeTextInputVerticalInset = 4 // 可选:不需要悬浮占位符时关闭,可进一步压缩高度 titleTextfieldeController?.isFloatingEnabled = false // 降低文本框垂直抗压缩优先级,让手动设置的30高度约束优先生效 serviceTitleTextField.setContentCompressionResistancePriority(.defaultLow, for: .vertical) } }
额外检查项
打开Storyboard,选中serviceTitleTextField的30高度约束,确认约束的优先级为1000(Required),避免约束被系统默认优先级的规则覆盖。
内容的提问来源于stack exchange,提问作者anySwift
相关产品推荐
相关产品推荐

