В основном все делают именнно так как ты и описал. Можно еще извратиться и сделать childviewcontroller и вынести его в категорию
да, но если скрыть UITableView, то не будет работать UIRefreshControl (обновление данных). А можно как-нибудь в сторибоарде создать UIView, добавить в него картинки/текст и т.п., а потом если данных нет добавить его в UITableView, чтобы программно не создавать + чтобы работал UIRefreshControl?