The answer is that iOS is smart enough to recognize that if your view's alpha
is less than 1, it needs to draw the content behind your view, regardless of your view's opaque
property.
In response to comments: from my limited experimentation, I don't think the view's opaque
property has any effect. (I think the documentation is wrong.) The view's layer's opaque
property does have an effect: it controls whether the CGContext
passed to drawRect:
has an alpha channel. If the layer's opaque
property is YES, the context has no alpha channel (and is treated as if every pixel has alpha of 1.0).
Changing the view's opaque
property has no effect on the layer's opaque
property. This is different than (for example) the view's alpha
property, which is just a wrapper for the layer's opacity
property.
In theory, having documented that the opaque
property allows them to optimize drawing, Apple could implement that optimization in the future. In practice, doing so would probably break a lot of apps, so they probably won't make such a change apply to apps linked against older SDKs. (They have the ability to make UIKit behave differently depending on which version the app was linked with.)