在HarmonyOS NEXT开发中RelativeContainer 经过offset设置的锚点位置坐标不能作为锚点,只能用没有经过offset配置的旧坐标作为锚点来给下一个组件进行标定?

在HarmonyOS NEXT开发中RelativeContainer 经过offset设置的锚点位置坐标不能作为锚点,只能用没有经过offset配置的旧坐标作为锚点来给下一个组件进行标定?比如说A组件经过了锚点配置了位置,此时A组件有一个坐标pos1,经过offset设置了新的位置pos2,B组件想要基于A的新位置pos2做标定,必须要将A组件的offset一并加上才能达到在pos2基础上做标定。
比如说下面三个组件,想要达成的效果是年龄和个人信息之间相差13,性别和年龄之间间隔13,但是实际上却是这三个组件之间的间隔为0

Row() { 
  Text('个人信息') 
    .fontColor(Color.White) 
    .fontSize(14) 
    .alignRules({ 
      left: { anchor: 'row1', align: HorizontalAlign.Start }, 
      center: { anchor: 'row1', align: VerticalAlign.Center } 
    }) 
    .offset({ 
      x: 13, 
      y: 0, 
    }) 
    .id("person_info_text") 
 
  Button('年龄') 
    .fontSize(12) 
    .aspectRatio(1.857) 
    .alignRules({ 
      left: { anchor: "person_info_text", align: HorizontalAlign.End }, 
      center: { anchor: 'row1', align: VerticalAlign.Center } 
    }) 
    .offset({ 
      x: 13, 
      y: 0, 
    }) 
    .id("age_btn") 
 
  Button('性别') 
    .fontSize(12) 
    .aspectRatio(1.857) 
    .alignRules({ 
      left: { anchor: "age_btn", align: HorizontalAlign.End }, 
      center: { anchor: 'row1', align: VerticalAlign.Center } 
    }) 
    .offset({ 
      x: 13, 
      y: 0, 
    }) 
    .id("gender_btn")
阅读 573
avatarAI BotBETA
**答案**:
是的,你的理解是正确的。在HarmonyOS NEXT开发中,`RelativeContainer` 的 `alignRules` 配置确实只能使用未经 `offset` 调整的原始锚点位置坐标来进行组件标定。当你对一个组件应用 `offset` 后,这个组件的新位置不会更新为其锚点的参考位置,即 `alignRules` 中的锚点坐标仍然是组件未经 `offset` 前的位置。

在你的例子中,`个人信息` 文本通过 `offset` 移动了一个新的位置 `pos2`,但 `年龄` 按钮和 `性别` 按钮在尝试基于 `个人信息` 的新位置进行标定时,由于 `alignRules` 仍然使用 `个人信息` 的原始位置(`pos1`),所以它们之间的间隔并未按照预期设置为13,而是保持为0。

要解决这个问题,你需要手动计算并设置每个组件的位置,或者重新设计布局逻辑,确保每个组件的 `alignRules` 和 `offset` 能够正确地反映你想要的布局效果。
1 个回答

RelativeContainer经过offset设置的锚点位置还是之前没有偏移的位置,所以后面的组件参考的位置还是偏移前的位置,所以要实现上面的效果需要这样设置:

.offset({ 
  x: 13, 
  y: 0, 
}) 
  .offset({ 
    x: 26, 
    y: 0, 
  }) 
  .offset({ 
    x: 39, 
    y: 0, 
  })
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进