How to deal with iPhone with retina screen?

The problem is by default Unity understands retina as just a big screen. Result - even buttons (created in visual editor) on the screen become microscopic.

In your root canvas, make sure it has the Canvas component and set its “UI Scale Mode” parameter to “Screen Space - Overlay”. Make sure it also has the Canvas Scaler script and set its “UI Scale Mode” to “Scale With Screen Size”. If you already have these and you have changed their default values, reset the components values (gear icon->reset) to be sure you are using defaults.

Now any button you add inside this canvas will scale nicely with the screen. You may also want to attach say buttons near the top of the screen to the top, buttons near the bottom to the bottom.

Always design with anchors, so that your buttons scale proportionnally relative to screen. As a GUI designer, make sure you constantly re-stretch the game view, to ensure the gui deforms correctly and expectingly

Remember, you can spread anchors of the RectTransform, by hand. Two most important rules:

  • Distance from screen corner to the anchor corner is always maintained as a ratio.
  • Distance between anchor corner and the rectangle corner is always fixed, meaning that distance will take up (for example) 5 pixels on a wide screen and 5 pixels on a tiny computer for ants.

now, if you’ve spent lots of time developing GUI, only one thing is left - smash the iPhone