I had the same problem as you, and I spent some time to solve this problem. When you add view B to view A, you do not hide view A. The view continues there, and, as expected, voiceOver, it will read that view / label.
You can use the Debug view that Xcode provides you with to see this problem. I wrote an example to demonstrate how voiceOver sees your tags.
When you use addSubview, the view hierarchy looks like this:

So, in this case, a container view with Hello Stack! shortcut above Hello World shortcut. As a user, you cannot see the Hello World shortcut. However, voiceOver can see this view.
Well, now that the problem is known, the solution is this: whenever you want to add a view differently, you hid the previous view first. Then use Debug View for xcode to find out what your views look like.
I will fix this to show you how to fix the error I demonstrated:
In code: 
Debugging:
- first tag: postimg.org/image/cabhadzrl/
- second label: postimg.org/image/nsldgjb41/5605fbcd/
If you are an observer, I have added a view container between labels, but this view is just to improve the vision of the hierarchy.
source share