added new method that also accepts a completion block

@ndonald2 Quick PR for you. Just one question: do you think the completion block should be called before or after `layoutIfNeeded` in the non-animated case?