I see it more like this:
(For any of these options, always draw it on paper or a whiteboard, trust me it saves time and code frustration)
Use a GUI designer, preferably a recommended one used by most in a particular language. That way your code won't be too confusing where you can tweak it to your (most of time) liking and plus since the code will most likely be thrown away or heavily changed later, you won't have to waste too much time early in the development cycle. Using a GUI designer is good for quick and simple GUI applications or to show your client a rough picture of the application where they don't have to wait months just to see.
This one is a bit of a mix bag, depending on the language and time constraint. Using a GUI designer here would be helpful but you should consider cleaning up after it or creating smaller components manually. That way anybody else (or yourself) would have an easier time fixing bugs and reading the code. This will help you gain better control and flexibility of the GUI. (Also a nice benefit of learning as you code)
This is when it becomes essential to creating GUIs manually. Larger projects can get complex quickly and creating GUIs with a designer only makes the project more complex and harder to debug. Creating a GUI framework for your application can help break the task of creating a GUI manually easier. Complete control of your application is necessary as it will help with maintenance or if you want to add features later (or a pesky customer who mentions you missed a requirement lol), incorporating them will be less frustrating and cleaner.
In my personal experience, learning to create GUI manually takes time and some require tough learning curves (Heck, I program in Java and the Oracle Java tutorial site warns you against doing GUIs yourself and to use a designer), but in the end you gain higher control and flexibility of your applications, which in turn creates better looking applications. Hope you use this a decent rough guide! Happy GUIing :)