【问题标题】:Making text resize in two aligned labels in iOS在iOS中的两个对齐标签中调整文本大小
【发布时间】:2018-11-14 07:03:11
【问题描述】:

我有两个标签,并排,像这样:

|--15--labelA--8--longerLabelB--15--|

我想让它们的字体大小在所有屏幕尺寸上都彼此相等(一起增大和缩小),但是我收到一个错误消息,提示我需要将其中一个标签的内容拥抱优先级设置得更高,或者内容压缩阻力优先级更高,这使得其中一个比另一个具有更大的文本大小......

我尝试过使用 stackview。没有运气。

我怎样才能做到这一点?

【问题讨论】:

  • 您是否试图让 LabelA 的字体大小与 LabelB 的“自动缩小”文本的最终字体大小相匹配?
  • @DonMag 是的....
  • 好的 - 只是为了清楚...您希望两个标签的宽度和高度相同?所以它看起来像这样 - 顶行是原始字体大小(24.0),中间行右标签自动收缩和左标签匹配,底行左标签自动收缩和右标签匹配? imgur.com/a/7f1j5W6
  • 高度相同,宽度不同..
  • 好的 - 你必须更清楚你想要什么作为最终结果......你想要字体大小自动缩小吗?或者,如果 B 自动换行,您是否希望 A 的高度增长以匹配 B 的新高度?你想要固定宽度吗?或者您希望一个标签拉伸其宽度而不是另一个?也许添加一两张图片以准确显示您所追求的......

标签: ios swift autolayout storyboard


【解决方案1】:

如果你想让它们大小相等,从任意一个控件拖动到另一个并选择Equal-Widths

或者

正如错误所说,前往任何你想要的人并将其设置为 contentHuggingPriority / contenyCompresseionResistence 设置为 1000

【讨论】:

  • 感谢您的回答,但两种选择都比另一种更大...... :(
  • 第一个选项不会,但文本可能有不同的内容
  • 他们有不同的内容。一个较长,因此如果每个标签占据屏幕的一半,那么长文本将缩小以适应,而短文本将保持较大。
【解决方案2】:

labelA 和longerLabelB 都有自己的内容大小,Apple 称之为固有大小,会影响布局。请考虑以下两种情况(假代码):

let totalLength = 15 + contentSize(LabelA) + 8 + contentSize(LabelB) + 15 
if totalLength > containerSize.width {
   // which label should be shorter or compressed? LabelA or LabelB? ?
   // answer: compress the one with lower compression resistance priority. ?

   // compressed one would with content like: "xxxx....", truncated with "..." at last
} else { 
   // which label should be longer or hugging? LabelA or LabelB? ?
   // answer: stretch the one with lower content hugging priority. ?
}

因此,您可以将longerLabelB 的内容拥抱优先级设置为低于labelA 的某个值。

如果您还希望 LabelA 的内容不像“xxxx...”那样被压缩,请将其设置为' 压缩阻力优先级高于longLabelB

labelA应该是默认的,longLabelB的设置截图如下:

注意:这两个优先级的实际值并不重要,关键是优先级,或者哪个更高或更低

【讨论】:

  • 感谢您的回答,但使用这些优先级会缩小一个标签,而牺牲另一个标签...字体大小不一样:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 2022-07-07
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
相关资源
最近更新 更多