ScrollingFrameのAutomaticCanvasSizeでスクロール幅が足りない時の原因と対処法【Roblox Studio】

2日間はまったので備忘録として記録。

事象

ScrollingFrameのAutomaticCanvasSizeをONにすれば要素にあわせてスクロール幅を自動で調整してくれる機能がある。
それが最後の方までスクロールしてくれないことがあった。

原因

ScrollingFrame→Frame→Buttonのように入れ子にしている状態で、ButtonのPositionをScaleで設定していた。
Scaleで設定するとなぜかおかしくなる。

解決策

ButtonのPositionをScaleではなくOffsetで設定する。

別の解決策

scaleで指定したい場合は、最後に透明のFrameを挿入してScrollingFrameのサイズを伸ばして対応した

	local dummyFrame = Instance.new("Frame")
	dummyFrame.BackgroundTransparency = 1
	dummyFrame.Parent = Frame

個人的によく使用するGridView用のfunction

最後にdummyFrameを挿入する。

function setDummyFrames(frame, parentInstance)
	local dummyFrame = frame:Clone()
	dummyFrame.BackgroundTransparency = 1
	dummyFrame.LayoutOrder = 1000000
	dummyFrame.Visible = true
	for _, v in pairs(dummyFrame:GetChildren()) do
		if not v:IsA("UIAspectRatioConstraint") then
			v:Destroy()
		end
	end
	dummyFrame:Clone().Parent =  parentInstance
	dummyFrame:Clone().Parent =  parentInstance
	dummyFrame:Clone().Parent =  parentInstance
end