旋转的滑块不会填充可用高度,因为它在旋转后受到错误的约束。要解决这个问题,您首先需要交换width
and height
values.
Next, Modifier.rotate
不会改变视图位置,因此旋转后需要手动更新。要了解发生了什么,您可以运行以下代码:
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.fillMaxSize()
) {
Box(Modifier
.size(100.dp, 50.dp)
.border(width = 1.dp, color = Color.Red)
.rotate(90f)
.background(Color.Green))
}
它将产生以下视图:
如您所见,真实视图框架显示有红色边框,并且您的视图有意外的偏移。
要修复它,您可以使用Modifier.layout
:您需要交换约束和结果视图大小尺寸,并恢复偏移。
我也在用Modifier.graphicsLayer
with transformOrigin
设置为零点,因此更容易计算所需的偏移量Modifier.layout
.
最后一部分,尺寸修饰符应该放在后面Modifier.layout
,以便在期间获取父视图约束而不是静态约束layout
. And layout
应旋转后放置。详细了解为什么修饰符顺序很重要这个答案
滑块的最终修改器:
Modifier
.graphicsLayer {
rotationZ = 270f
transformOrigin = TransformOrigin(0f, 0f)
}
.layout { measurable, constraints ->
val placeable = measurable.measure(
Constraints(
minWidth = constraints.minHeight,
maxWidth = constraints.maxHeight,
minHeight = constraints.minWidth,
maxHeight = constraints.maxHeight,
)
)
layout(placeable.height, placeable.width) {
placeable.place(-placeable.width, 0)
}
}
.width(120.dp)
.height(50.dp)