For other UI elements that could also benefit from being scaled when using Dynamic Type, you can use UIFontMetrics's scaledValue(for:). Some good examples are progress bar components, which tend to be quite slim.

https://developer.apple.com/documentation/uikit/uifontmetrics/scaledvalue(for:)

Two examples of the Netflix app, one with the default text size and another one with the largest accessibility text size. The progress bar for the first one is very thin. The second one is noticeably thicker. One way of doing this would be by setting the height anchor constraint of the bar to a value returned by the scaledValue function, passing the default height, in this case, 2.0, called from the default UIFontMetrics.

You may also find interesting...

If you are displaying something in two or more columns, you may want to change that to as little as one column when using some of the largest Dynamic Type settings to keep the text readable.

When implementing a UISlider, it is a good idea to consider how much the slider value should change when swiping up/down to adjust it. It might not always make sense to do it in 10% increments, which is the default behaviour. Could be because the value at those intervals doesn't make sense, or feel random, or because it wouldn't provide the user with a fine enough control being able to go through the whole slider in just 10 swipes. It user will still be able to adjust the slider to any value by double tapping and holding and then moving the finger left or right, bypassing VoiceOver gestures. VoiceOver announces the new value as it changes.

Hacks are accessibility’s worst enemy. An example. There is a ‘trick’ floating on the internet: if you want a button with an icon to the right of the text, set the semantic content attribute to force right to left. Great way to create focus traps.

Created in Swift with Ignite.

Supporting Swift for Swifts