I have the MacBook Pro (15-inch, 2017), a Samsung 4k display, and a USB-C to HDMI cable between them (plugged directly into the computer).
The entire setup supports everything necessary. Please don't say they need to be compatible.
After a lot of fiddling, I get it to do 4k@60Hz and it works perfectly - even piped the audio.
Then, something will happen - power flicker, I turn off/on the TV, take my laptop somewhere else, act of god occurs, whatever - and the computer will suddenly forget it can use 4k@60Hz.
Sometimes this is fixed by repeatedly unplugging/plugging-in the display, most times not.
I have the command-line utility
screenresolution. Sometimes OS-X decides to use 30Hz even when it knows 60Hz is available. This utility can then change it for me.
Sometimes (like right now) I want to throw this computer off the roof because it refuses to believe it supports 4k@60Hz.
This is independent of OS-X version, independent of TV (this same issue happened with a TCL TV), and independent of cable (happened with a different brand of cable).
I tried some system-preferences extension which required me to turn off SIP to manually add custom modes, and that sometimes worked - but also sometimes caused the HDMI audio to not work, so I got rid of that.
How do I convince OS X that the monitor does and always will support 4k @ 60Hz?
In case it matters, I also have (on a different USB-C port) a USB-C/TB3 hub and its display-port output goes to the MDP-to-dual-link-dvi-adatper to a 30" Cinema Display, so I have the 4k@60Hz TV, the 30" Cinema Display, and the laptops display all acting as non-mirrored monitors.
This is the [active] cable I’m using: https://www.amazon.com/dp/B075V5JK36/ref=cm_sw_r_cp_api_i_3g9hBbY6VM4X5