His "reason" is because he doesn't like where the new American embassy is located, and he lied when he blamed that decision on President Obama. The move was actually instituted during the George W. Bush administration for valid security reasons. If you know London at all, you might know that the former embassy was located between Hyde Park and Grosvenor Square, making it quite vulnerable to terrorist attacks.
Trump was originally scheduled to visit London for the official inveiling ceremony for the new embassy, which occurs tomorrow.
The real reason Trump is not visiting is because he knows Brits would stage a massive demonstration during his appearance. He also likely would be snubbed by London's mayor, whom Trump has treated very badly, and there are also signs Her Majesty would give him the cold shoulder, too.
Now if Trump had an ounce of common sense in his head, he would have directed a simple message be released that he could not attend because of a urgent timely matter. He already had one easily available -- the looming government shut-down. But he lacks basic common sense and, instead, tries to make everything about himself with an idiotic tweet.
And with that, he failed badly. Again. He embarrassed himself and he embarrassed America.
He also quite nicely displayed his cowardice -- he's quick to dish out insults but he's afraid of peaceful dissent.
You can change channels, Donnie, but you can't change reality.