Now caches header and footer, and applies a (hackish) way of triggering UIAppearance on the footer/header before storing them in cache so that the height returned is correct