固定大小

将视图固定在其理想大小,防止其被压缩或扩展超出其内容本身所需的尺寸。

类型

fixedSize?: boolean | {
  horizontal: boolean
  vertical: boolean
}

概述

fixedSize 修饰符会告诉布局系统使用视图的“理想尺寸”进行布局,而不是根据父视图的限制拉伸或压缩视图。这在你希望文本不被截断、内容完整显示时非常有用,或者在你希望视图不随父容器大小变化而自动调整尺寸时使用。

该行为与 SwiftUI 中的 fixedSize() 一致。

使用方式

你可以通过两种方式设置 fixedSize:

1. 布尔值形式

<Text fixedSize>
  这段文字不会被压缩或截断。
</Text>

等价于:

<Text fixedSize={{ horizontal: true, vertical: true }}>
  这段文字不会被压缩或截断。
</Text>

2. 对象形式

通过对象形式可以分别控制水平和垂直方向是否固定:

<Text fixedSize={{ horizontal: true, vertical: false }}>
  水平方向不压缩,垂直方向仍可适应内容。
</Text>

行为说明

  • horizontal: true:视图水平方向保持其理想宽度,不会被压缩或拉伸,常用于防止文字被截断。
  • vertical: true:视图垂直方向保持理想高度,不会被压缩或拉伸。
  • 两个方向都为 false 时,该修饰符不生效。
  • 父容器在布局时如果给定了较小的空间,设置了 fixedSize 的视图将优先保持其理想尺寸,可能导致内容溢出。

示例

import { Text, VStack } from "scripting"

<VStack frame={{ width: 280 }}>
  <Text fixedSize={{ horizontal: false, vertical: true }}>
    这段较长的文字按可用宽度换行,并保留理想高度。
  </Text>
  <Text fixedSize={{ horizontal: true, vertical: false }}>
    这段文字保持自然宽度,父容器较窄时可能溢出。
  </Text>
</VStack>

注意事项

  • 常用于防止 Text 视图在父容器中被截断。
  • 与 HStack、VStack 等布局组件结合时,可以更精确地控制某个子视图不随整体布局缩放。
  • 使用该修饰符时,应考虑可能出现的内容溢出或布局冲突问题。

HStack 多行文本

横向保持可压缩,让文本按父容器宽度换行,仅固定纵向理想尺寸。fixedSize=true 同时固定两个方向,可能保留很宽的单行,不会强制换行。父容器仍需提供有限宽度;layoutPriority 帮助分配宽度,但不创造额外空间。

import { HStack, Text } from "scripting"
function MessageRow() {
  return <HStack frame={{ width: 280 }}>
    <Text>Details</Text>
    <Text fixedSize={{ horizontal: false, vertical: true }} layoutPriority={1}>
      A longer explanation that should wrap within the available row width and grow vertically.
    </Text>
  </HStack>
}