You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:15:04