diff --git a/lua/app/ui/main_city/cell/side_bar_base_cell.lua b/lua/app/ui/main_city/cell/side_bar_base_cell.lua index 3d278180..cbcc1868 100644 --- a/lua/app/ui/main_city/cell/side_bar_base_cell.lua +++ b/lua/app/ui/main_city/cell/side_bar_base_cell.lua @@ -152,6 +152,10 @@ function SideBarBaseCellComp:setAnchoredPositionY(y) self.baseObject:setAnchoredPositionY(y) end +function SideBarBaseCellComp:setAnchoredPositionX(x) + self.baseObject:setAnchoredPositionX(x) +end + function SideBarBaseCellComp:setVisible(visible) self.visible = visible self.baseObject:setVisible(visible) diff --git a/lua/app/ui/main_city/main_city_ui.lua b/lua/app/ui/main_city/main_city_ui.lua index 4f62ea0d..829cb389 100644 --- a/lua/app/ui/main_city/main_city_ui.lua +++ b/lua/app/ui/main_city/main_city_ui.lua @@ -390,7 +390,14 @@ end function MainCityUI:initLeftRightBtns() self.leftNode = self.uiMap["main_ui.left_node"] self.leftSideBar = self.uiMap["main_ui.left_node.side_bar"] + self.leftSideBar:setAnchorMin(0, 1) + self.leftSideBar:setAnchorMax(0, 1) + self.leftSideBar:getTransform().pivot = BF.Vector2(0, 1) + local addY = SafeAreaManager:getNotchScreenHeight() + self.leftSideBar:setAnchoredPosition(17, -280 - addY) self.leftArrowBtn = self.uiMap["main_ui.left_node.arrow_node"] + self.leftArrowBtn:setAnchorMin(0, 1) + self.leftArrowBtn:setAnchorMax(0, 1) self.leftArrowBtn:addClickListener(function() self:openOrCloseLeftSideBar() end) @@ -398,7 +405,13 @@ function MainCityUI:initLeftRightBtns() self.rightNode = self.uiMap["main_ui.right_node"] self.rightSideBar = self.uiMap["main_ui.right_node.side_bar"] + self.rightSideBar:setAnchorMin(1, 1) + self.rightSideBar:setAnchorMax(1, 1) + self.rightSideBar:getTransform().pivot = BF.Vector2(1, 1) + self.rightSideBar:setAnchoredPosition(-17, -280 - addY) self.rightArrowBtn = self.uiMap["main_ui.right_node.arrow_node"] + self.rightArrowBtn:setAnchorMin(1, 1) + self.rightArrowBtn:setAnchorMax(1, 1) self.rightArrowBtn:addClickListener(function() self:openOrCloseRightSideBar() end) @@ -407,6 +420,7 @@ function MainCityUI:initLeftRightBtns() self.sideBarCellObject = self.uiMap["main_ui.cache_node.side_bar_cell"] local w, h = self.sideBarCellObject:fastGetSizeDelta() self.sideBarHeight = h + self.sideBarMaxCount = 4 if self.leftBarList == nil then self.leftBarList = {} end @@ -478,6 +492,8 @@ function MainCityUI:refreshLeftBtns() if cell == nil then cell = self:addSideBarCellComp(v) cell:getBaseObject():setParent(self.leftSideBar, false) + cell:getBaseObject():setAnchorMin(0, 1) + cell:getBaseObject():setAnchorMax(0, 1) end cell:initWithParentUI(self, v, true) table.insert(self.leftBarList, cell) @@ -490,16 +506,25 @@ function MainCityUI:refreshLeftBtns() end self.leftNode:setAnchoredPositionX(0) local y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2 + local x = 60 + local maxCount = self.sideBarMaxCount + local minY = y + local bgSizeX = 112 + local otherColumn = false if isClose then -- 只显示3个 local minCount = GConst.MainCityConst.SIDE_BAR_MIN_COUNT for i = 1, minCount do local sideBarBtn = self.leftBarList[i] if i <= sideBarShowCount then + sideBarBtn:setAnchoredPositionX(x) sideBarBtn:setAnchoredPositionY(y) sideBarBtn:refresh() sideBarBtn:setActive(true) sideBarBtn:setVisible(true) y = y - self.sideBarHeight - SIDE_BAR_INTERVAL + if minY > y then + minY = y + end end end for i = minCount + 1, sideBarShowCount do @@ -509,25 +534,49 @@ function MainCityUI:refreshLeftBtns() end else for k, v in ipairs(self.leftBarList) do + maxCount = maxCount - 1 + v:setAnchoredPositionX(x) v:setAnchoredPositionY(y) v:refresh() v:setActive(true) v:setVisible(true) y = y - self.sideBarHeight - SIDE_BAR_INTERVAL + if minY > y then + minY = y + end + if maxCount == 0 then -- 换行 + y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2 + x = x + 110 + bgSizeX = 228 + otherColumn = true + end end end if sideBarShowCount <= GConst.MainCityConst.SIDE_BAR_MIN_COUNT then -- 小于3个不显示箭头 y = y + self.sideBarHeight / 2 - self.leftSideBar:setSizeDeltaY(-y) + if minY > y then + minY = y + end + self.leftSideBar:setSizeDeltaX(bgSizeX) + self.leftSideBar:setSizeDeltaY(-minY) self.leftArrowBtn:stopClickAnimation() self.leftArrowBtn:setVisible(false) else local arrowHeight = self.leftArrowBtn:getRectHeight() y = y + self.sideBarHeight/2 - SIDE_BAR_ARROW_INTERVAL - arrowHeight - self.leftSideBar:setSizeDeltaY(-y) + if minY > y then + minY = y + end + self.leftSideBar:setSizeDeltaX(bgSizeX) + self.leftSideBar:setSizeDeltaY(-minY) self.leftArrowImg:setLocalScale(1, isClose and -1 or 1, 1) self.leftArrowBtn:setVisible(true) - self.leftArrowBtn:setAnchoredPositionY(self.leftSideBar:fastGetAnchoredPositionY() + y + arrowHeight/2 + SIDE_BAR_BORDER_OFFSET) + self.leftArrowBtn:setAnchoredPositionY(self.leftSideBar:fastGetAnchoredPositionY() + minY + arrowHeight/2 + SIDE_BAR_BORDER_OFFSET) + if otherColumn then + self.leftArrowBtn:setAnchoredPositionX(133) + else + self.leftArrowBtn:setAnchoredPositionX(73) + end end end @@ -558,6 +607,8 @@ function MainCityUI:refreshRightBtns() if cell == nil then cell = self:addSideBarCellComp(v) cell:getBaseObject():setParent(self.rightSideBar, false) + cell:getBaseObject():setAnchorMin(1, 1) + cell:getBaseObject():setAnchorMax(1, 1) end cell:initWithParentUI(self, v, false) table.insert(self.rightBarList, cell) @@ -570,16 +621,25 @@ function MainCityUI:refreshRightBtns() end self.rightNode:setAnchoredPositionX(0) local y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2 + local x = -60 + local maxCount = self.sideBarMaxCount + local minY = y + local bgSizeX = 112 + local otherColumn = false if isClose then -- 只显示一个 local minCount = GConst.MainCityConst.SIDE_BAR_MIN_COUNT for i = 1, minCount do local sideBarBtn = self.rightBarList[i] if i <= sideBarShowCount then + sideBarBtn:setAnchoredPositionX(x) sideBarBtn:setAnchoredPositionY(y) sideBarBtn:refresh() sideBarBtn:setActive(true) sideBarBtn:setVisible(true) y = y - self.sideBarHeight - SIDE_BAR_INTERVAL + if minY > y then + minY = y + end end end for i = minCount + 1, sideBarShowCount do @@ -589,25 +649,50 @@ function MainCityUI:refreshRightBtns() end else for k, v in ipairs(self.rightBarList) do + maxCount = maxCount - 1 + v:setAnchoredPositionX(x) v:setAnchoredPositionY(y) v:refresh() v:setActive(true) v:setVisible(true) y = y - self.sideBarHeight - SIDE_BAR_INTERVAL + if minY > y then + minY = y + end + if maxCount == 0 then -- 换行 + y = -SIDE_BAR_BORDER_OFFSET - self.sideBarHeight/2 + x = x - 110 + bgSizeX = 228 + otherColumn = true + end end end if sideBarShowCount <= GConst.MainCityConst.SIDE_BAR_MIN_COUNT then y = y + self.sideBarHeight / 2 - self.rightSideBar:setSizeDeltaY(-y) + y = y + self.sideBarHeight / 2 + if minY > y then + minY = y + end + self.rightSideBar:setSizeDeltaX(bgSizeX) + self.rightSideBar:setSizeDeltaY(-minY) self.rightArrowBtn:stopClickAnimation() self.rightArrowBtn:setVisible(false) else local arrowHeight = self.rightArrowBtn:getRectHeight() y = y + self.sideBarHeight / 2 - SIDE_BAR_ARROW_INTERVAL - arrowHeight - self.rightSideBar:setSizeDeltaY(-y) + if minY > y then + minY = y + end + self.rightSideBar:setSizeDeltaX(bgSizeX) + self.rightSideBar:setSizeDeltaY(-minY) self.rightArrowImg:setLocalScale(1, isClose and -1 or 1, 1) self.rightArrowBtn:setVisible(true) self.rightArrowBtn:setAnchoredPositionY(self.rightSideBar:fastGetAnchoredPositionY() + y + arrowHeight/2 + SIDE_BAR_BORDER_OFFSET) + if otherColumn then + self.rightArrowBtn:setAnchoredPositionX(-133) + else + self.rightArrowBtn:setAnchoredPositionX(-73) + end end end