Text(Label/Box/Button):GetTextScaledApproximateSize()

Didn’t I tell you that you don’t have to wait a frame anymore?

Here’s the same script in the reply that I linked, but with TextScaled = true and the size of the frame is changed instead of the text.

local sg = Instance.new("ScreenGui")
sg.Parent = game:GetService("CoreGui")
local label = Instance.new("TextLabel", sg)
label.Text = "Test"
label.Size = UDim2.new(0, 100, 0, 100)
label.TextScaled = true
print(label.TextBounds)
label.Size = UDim2.new(0, 200, 0, 200)
print(label.TextBounds)
wait(1)
print(label.TextBounds)

This will print:

99, 59
165, 100 (x2)

Again, you don’t need to wait a frame anymore for the values of properties to update.