Issue with custom player list scaling

A few weeks ago, I made a custom player list that shows the player’s stats on it and a custom title the player can select.

The issue is that on certain screens, the player list appears weirdly scaled, and I have no idea of what’s causing it or how can I replicate it. This is an image that one of the developers sent me, showing the unintended behavior of the system:

image

And this is how it’s supposed to look like in-game:
intended

Here is the script in case it’s needed:

local function updatePlayerFrame(plr)
	if not scroller:FindFirstChild(plr.Name) then
		local templateClone = template:Clone()
		templateClone.Name = plr.Name

		if table.find(staff, plr.UserId) then
			templateClone.UIStroke.Color = Color3.fromRGB(225, 164, 255)
			templateClone.UIStroke.Thickness = 2
			templateClone.DisplayName.FontFace.Weight = Enum.FontWeight.Bold
			templateClone.DisplayName.TextColor3 = Color3.fromRGB(225, 164, 255)
			templateClone.Icons.Staff.Visible = true
		elseif table.find(creator, plr.UserId) then
			templateClone.UIStroke.Color = Color3.fromRGB(255, 60, 255)
			templateClone.UIStroke.Thickness = 2
			templateClone.DisplayName.FontFace.Weight = Enum.FontWeight.Bold
			templateClone.DisplayName.TextColor3 = Color3.fromRGB(255, 60, 255)
			templateClone.Icons.Creator.Visible = true
		end

		templateClone.DisplayName.Text = plr.Name
		templateClone.Towers.Text = tostring(NumberComma(plr:WaitForChild("leaderstats"):WaitForChild("Towers", 5).Value)).." tower(s)"

		task.spawn(function()
			plr:WaitForChild("leaderstats").Towers:GetPropertyChangedSignal("Value"):Connect(function()
				templateClone.Towers.Text = tostring(NumberComma(plr:WaitForChild("leaderstats"):WaitForChild("Towers", 5).Value)).." tower(s)"
				
				if not table.find(staff, plr.UserId) and not table.find(creator, plr.UserId) then
					if plr:WaitForChild("leaderstats").Towers.Value >= 30 then
						templateClone.Towers.FontFace.Weight = Enum.FontWeight.Bold
					end

					if plr:WaitForChild("leaderstats").Towers.Value >= 60 then
						templateClone.Towers.TextColor3 = Color3.fromRGB(230, 201, 255)
						templateClone.UIStroke.Color = Color3.fromRGB(230, 201, 255)
					end

					if plr:WaitForChild("leaderstats").Towers.Value >= 90 then
						templateClone.Towers.TextColor3 = Color3.fromRGB(119, 162, 255)
						templateClone.UIStroke.Color = Color3.fromRGB(119, 162, 255)
					end

					if plr:WaitForChild("leaderstats").Towers.Value >= 120 then
						templateClone.Towers.TextColor3 = Color3.fromRGB(255, 235, 134)
						templateClone.UIStroke.Color = Color3.fromRGB(255, 235, 134)
						templateClone.UIStroke.Thickness = 2
					end
				end
			end)
		end)

		templateClone.Parent = scroller
		scroller.CanvasSize = UDim2.new(0, 0, 0, scroller.UIListLayout.AbsoluteContentSize.Y)
	end
end

local function updatePlayerTitle(plr)
	local selectedTitle = plr:FindFirstChild("SelectedTitle")
	
	if selectedTitle and selectedTitle.Value then
		local titleFind = ReplicatedStorage:WaitForChild("Titles"):FindFirstChild(selectedTitle.Value)
		
		if titleFind then
			local clone = titleFind:Clone()
			local findPlayerFrame = scroller:FindFirstChild(plr.Name)
			
			if findPlayerFrame then
				local titleFrame = findPlayerFrame:WaitForChild("DesignFrame", 5)
				
				if titleFrame:FindFirstChildWhichIsA("Frame") then
					titleFrame:FindFirstChildWhichIsA("Frame"):Destroy()
				end
				clone.Parent = titleFrame
			else
				warn("No player frame found for", plr.Name)
			end
		else
			warn("No title found for", selectedTitle.Value)
		end
	else
		warn("No selected title for", plr.Name)
	end
end

local function PlayerJoin(plr)
	updatePlayerFrame(plr)
	updatePlayerTitle(plr)
end

local function PlayerLeave(plr)
	local playerFrame = scroller:FindFirstChild(plr.Name)
	if playerFrame then
		playerFrame:Destroy()
		scroller.CanvasSize = UDim2.new(0, 0, 0, scroller.UIListLayout.AbsoluteContentSize.Y)
	end
end

ReplicatedStorage:WaitForChild("FireLeaderboardTitle").OnClientEvent:Connect(function(titleInstance, player)
	local titleFind = ReplicatedStorage.Titles:FindFirstChild(titleInstance)

	if titleFind then
		local clone = titleFind:Clone()

		if scroller[player.Name].DesignFrame:FindFirstChildWhichIsA("Frame") then
			scroller[player.Name].DesignFrame:FindFirstChildWhichIsA("Frame"):Destroy()
		end

		clone.Parent = scroller[player.Name].DesignFrame
	end
end)

Players.PlayerAdded:Connect(function(plr)
	PlayerJoin(plr)
end)

Players.PlayerRemoving:Connect(function(plr)
	PlayerLeave(plr)
end)

for _, plr in pairs(Players:GetPlayers()) do
	PlayerJoin(plr)
end

The scrollingList uses UIListLayout and the UIPadding elements.

Any help and support is appreciated. Thank you

1 Like

IDK if this will help but I have something similar. Try setting the items in a frame with a set size if you haven’t already. If you set the frame as the parent it might work. That is what I did