I believe you need to create a new CGRect from scratch, and then assign it to the UIView.
You cannot grab the existing frame and then alter it's children.
CGRect newFrame = [button frame]; //this is not a new frame, it's the existing immutable frame