【问题标题】:Auto Layout: empty UITextField is only wide enough for 1 character自动布局:空 UITextField 仅足够宽 1 个字符
【发布时间】:2015-09-06 01:01:34
【问题描述】:

我正在尝试设置一个简单的 UITableViewCell,其中左侧有一个提示,然后旁边有一个文本字段,它占据了单元格的其余宽度;但是,在以下约束条件下,无论我将 UITextField 的宽度设置为多少,该字段的宽度都只能容纳 1 个字符。注意:UITextField 出现在正确的位置(它直接在提示的右侧),它真的很小。

cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[prompt]-[uitextfield]", options: NSLayoutFormatOptions.AlignAllCenterY, metrics: nil, views: views))
cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[promt]-|", options: nil, metrics: nil, views: views))
cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[uitextfield]-|", options: nil, metrics: nil, views: views))

一个有效的解决方案是将 uitextfield 的宽度设置为一个高得离谱的数字:

cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[prompt]-[uitextfield(1000)]", options: NSLayoutFormatOptions.AlignAllCenterY, metrics: nil, views: views))

但是我不能使用这个解决方案,因为有时 UITextField 是 UISegmentedControl(或其他控件),我不想将这些控件展开。

即使我明确地将 frame.size.width 设置为较大的值,为什么 UITextField 会强制其宽度非常小?

【问题讨论】:

    标签: ios swift uitableview autolayout uitextfield


    【解决方案1】:

    UITextField 沿横轴的内容拥抱优先级应低于提示元素的内容拥抱优先级。

    您可以通过yourTextField.contentHuggingPriorityForAxis(.Horizontal) 查看内容拥抱优先级。并使用yourTextField.setContentHuggingPriority(250, forAxis: .Horizontal) 设置它。您也可以在界面生成器中执行此操作(我更喜欢)。

    尝试将文本字段的内容拥抱优先级设置为250,并将提示设置为251。

    【讨论】:

    • 根据您的回答,我想出了一个解决方案:1)我将uitextfield的拥抱优先级更改为小于250(所有内容拥抱优先级均为250:contentView,uitextfield&prompt) 2)进行此更改后,uitextfield 仍然只有 1 个字符宽(注意:我的问题中没有提到这一点,但是 uitextfield 出现在提示旁边的正确位置,它真的很小)。使 uitextfield 扩展的原因是将其固定在其父视图的右侧:“H:|-[text]-[control]-|”
    • 太棒了!很高兴你自己得到了答案。 :) 干杯伙伴!
    【解决方案2】:

    解决方案:
    1) 将 UITextField 固定到其父视图的右边缘
    2) 将 UITextField 的拥抱优先级改为小于 250

    有人能解释一下为什么会这样吗?为什么只执行步骤 #1 不起作用?或者,如果你只做第 1 步,为什么不让 prompt & uitextfield 平均扩展以填充超级视图中的额外宽度?

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2017-12-08
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      相关资源
      最近更新 更多