Livecode 中的垂直对齐

问题描述 投票:0回答:3

我想在 livecode 中垂直对齐标签的文本,例如对齐到顶部、中间或底部。

   ----------------------------------
   |          top text               |
   |                                 |
   |                                 |
    ---------------------------------

    ---------------------------------
   |                                 |
   |          middle text            |
   |                                 |
    ---------------------------------

    ---------------------------------
   |                                 |
   |                                 |
   |          bottom text            |
    ---------------------------------

有什么办法可以做到吗?如果没有,有其他方法吗?

vertical-alignment livecode
3个回答
1
投票

没有内置方法可以按照您的描述自动定位标签文本。但是,除非您需要字段的文本格式设置属性,否则使用按钮作为标签可能会更好地满足您的需求,因为它默认能够自动垂直居中文本。

像下面这样的东西应该可以帮助你大部分工作。您可以直接将脚本粘贴到按钮中,并将“updateMyTextAlignment ”分派到值为“top”、“middle”或“bottom”的按钮。但假设您的堆栈中将有多个自定义标签,更好的选择是将以下行为应用到所有标签按钮。

command updateMyTextAlignment pValue
   put effective textSize of me into TS
   put effective textHeight of me into TH
   switch pValue
      case "top"
         set topMargin of me to -(height of me) + TS + TH 
      break
      case "middle"
         set topMargin of me to 0 -- may need to adjust this amount
      break
      case "bottom"
         set topMargin of me to height of me - TS - TH
   end switch
end updateMyTextAlignment

0
投票

不幸的是,属性窗口中没有选项,但您可以使用简单的脚本来完成此操作,例如

 set the topMargin of field theField to (round(((the height of field theField - the formattedHeight of field theField)/2)) + the topMargin of field theField)

上边距示例

更新: 上边距的最简单示例:

set the topMargin of field theField to 0 

然后从顶部将 0 调整为您想要的任何值,例如你的字体大小左右。

对于中间我会使用类似的东西

set the topMargin of field theField to (the height of field theField / 2)

也许还可以通过考虑字体大小来调整它。


0
投票

旧线程,这只是部分答案,但有些人可能会发现这很有用:

为了在字段中垂直居中 1 行文本,我使用此代码,由 @BerndN 提供:

local tFieldY, tFormatRect, tFormatheight, tFormatHalfHeight, tCurrFormatTop, tCenterField_To_TopTextDiff
put item 2 of the loc of field 1 into tfieldY
   
put the formattedRect of line 1 to - 1 of field 1 into tFormatRect
put item 4 of tFormatRect - item 2 of tFormatRect into tFormatHeight
put tFormatHeight div 2 into tFormatHalfHeight

put item 2 of tFormatRect into tCurrFormatTop
put tfieldY - tCurrFormatTop into tCenterField_To_TopTextDiff

set the topMargin of field 1 to the topMargin of field 1 \
      + tCenterField_To_TopTextDiff - tFormatHalfHeight

这对于 1 行文本效果很好 - 未在多行上进行测试。非常适合调整字段大小并希望保持文本行在中间垂直对齐。

© www.soinside.com 2019 - 2024. All rights reserved.