我想在 livecode 中垂直对齐标签的文本,例如对齐到顶部、中间或底部。
----------------------------------
| top text |
| |
| |
---------------------------------
---------------------------------
| |
| middle text |
| |
---------------------------------
---------------------------------
| |
| |
| bottom text |
---------------------------------
有什么办法可以做到吗?如果没有,有其他方法吗?
没有内置方法可以按照您的描述自动定位标签文本。但是,除非您需要字段的文本格式设置属性,否则使用按钮作为标签可能会更好地满足您的需求,因为它默认能够自动垂直居中文本。
像下面这样的东西应该可以帮助你大部分工作。您可以直接将脚本粘贴到按钮中,并将“updateMyTextAlignment
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
不幸的是,属性窗口中没有选项,但您可以使用简单的脚本来完成此操作,例如
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)
也许还可以通过考虑字体大小来调整它。
旧线程,这只是部分答案,但有些人可能会发现这很有用:
为了在字段中垂直居中 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 行文本效果很好 - 未在多行上进行测试。非常适合调整字段大小并希望保持文本行在中间垂直对齐。