function ItemTips.CreateEquipPanel(data, itemData, isWear, panelInsertIndex)
if not data or not itemData then
return
end
if SL:GetMetaValue("WINPLAYMODE") then
isWear = false
end
ResetDescParam()
ItemTips.item
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-04-07 16:00:43 |
👁️ 阅读: 0
你的居中逻辑存在两个问题:
1. **时机不对**:你在 `topDescs` 处理时,尝试获取 `lastItem` 并居中,但此时 `pushDescItem(topDescs, 1)` 还没执行,`rich_desc` 富文本还没创建,所以获取不到。
2. **方法错误**:即使能获取到,你的居中计算是基于 `maxWidth`(此时还没更新)和 `bgWidth`,但 `maxWidth` 在后续内容添加中会变化,导致最终位置不准。
**正确修改方法**:在 `pushDescItem` 函数内部,创建 `rich_desc` 后直接计算居中位置。
找到 `pushDescItem` 函数(通常在同一个文件里),修改创建富文本的部分。假设 `pushDescItem` 类似这样:
```lua
local function pushDescItem(descTable, isTopDesc)
-- ... 其他代码 ...
for i, desc in ipairs(descTable) do
local rich_desc = GUI:RichText_Create(contentPanel, "rich_desc" .. i, 0, 0, desc.str, richWidth, fontSize, desc.color or "#FFFFFF", vspace, nil, fontPath)
ItemTips.PushItem(contentPanel, rich_desc)
-- 如果是顶部描述,进行居中
if isTopDesc == 1 then
local descWidth = GUI:getContentSize(rich_desc).width
local bgWidth = _TotalWidth -- 使用总宽度,或者 maxWidth + 30
local centerX = (bgWidth - descWidth) / 2
GUI:setPositionX(rich_desc, centerX)
-- 更新最大宽度,确保容器足够宽
maxWidth = math.max(maxWidth, descWidth)
end
end
-- ... 其他代码 ...
end
```
然后在 `CreateEquipPanel` 中调用时传入 `isTopDesc` 参数:
```lua
-- 顶部描述
local topDescs = itemDescs.top_desc
if topDescs then
removeLastLine()
ItemTips.PushItem(contentPanel, ItemTips.CreateIntervalPanel(contentPanel, _DefaultSpace / 2))
pushDescItem(topDescs, 1) -- 传入1表示是顶部描述
ItemTips.PushItem(contentPanel, ItemTips.CreateIntervalPanel(contentPanel, _DefaultSpace, true))
end
```
**关键点**:
- 居中计算要在富文本创建后立即进行
- 使用 `_TotalWidth`(面板总宽度)而不是动态变化的 `maxWidth`
- 更新 `maxWidth` 确保滚动容器宽度足够
这样修改后,顶部描述就能正确居中了。如果还有问题,检查 `_TotalWidth` 的值是否正确设置。
你的居中逻辑存在两个问题:
1. **时机不对**:你在 `topDescs` 处理时,尝试获取 `lastItem` 并居中,但此时 `pushDescItem(topDescs, 1)` 还没执行,`rich_desc` 富文本还没创建,所以获取不到。
2. **方法错误**:即使能获取到,你的居中计算是基于 `maxWidth`(此时还没更新)和 `bgWidth`,但 `maxWidth` 在后续内容添加中会变化,导致最终位置不准。
**正确修改方法**:在 `pushDescItem` 函数内部,创建 `rich_desc` 后直接计算居中位置。
找到 `pushDescItem` 函数(通常在同一个文件里),修改创建富文本的部分。假设 `pushDescItem` 类似这样:
```lua
local function pushDescItem(descTable, isTopDesc)
-- ... 其他代码 ...
for i, desc in ipairs(descTable) do
local rich_desc = GUI:RichText_Create(contentPanel, "rich_desc" .. i, 0, 0, desc.str, richWidth, fontSize, desc.color or "#FFFFFF", vspace, nil, fontPath)
ItemTips.PushItem(contentPanel, rich_desc)
-- 如果是顶部描述,进行居中
if isTopDesc == 1 then
local descWidth = GUI:getContentSize(rich_desc).width
local bgWidth = _TotalWidth -- 使用总宽度,或者 maxWidth + 30
local centerX = (bgWidth - descWidth) / 2
GUI:setPositionX(rich_desc, centerX)
-- 更新最大宽度,确保容器足够宽
maxWidth = math.max(maxWidth, descWidth)
end
end
-- ... 其他代码 ...
end
```
然后在 `CreateEquipPanel` 中调用时传入 `isTopDesc` 参数:
```lua
-- 顶部描述
local topDescs = itemDescs.top_desc
if topDescs then
removeLastLine()
ItemTips.PushItem(contentPanel, ItemTips.CreateIntervalPanel(contentPanel, _DefaultSpace / 2))
pushDescItem(topDescs, 1) -- 传入1表示是顶部描述
ItemTips.PushItem(contentPanel, ItemTips.CreateIntervalPanel(contentPanel, _DefaultSpace, true))
end
```
**关键点**:
- 居中计算要在富文本创建后立即进行
- 使用 `_TotalWidth`(面板总宽度)而不是动态变化的 `maxWidth`
- 更新 `maxWidth` 确保滚动容器宽度足够
这样修改后,顶部描述就能正确居中了。如果还有问题,检查 `_TotalWidth` 的值是否正确设置。
← 返回问答库