After a year of iOS dev, I have slowly moved away from IB as well. You'll start off implementig everything in IB and putting any sort of layout logic in your view controller. But eventually, you'll start doing more complex views, you'll find it difficult to handle rotation, youll find it difficult to create reusable modules which are expected to handle different environments correctly (ie, status bar bs no status bar, etc).
Then one day you'll strip all of the layout logic out of your view controller, delete your xib files, and instead create a set of uiview subclasses and override their layoutSubviews method. On that day you will be happy.
In almost every case I've encountered so far, doing this has cleaned up my code (removed kludges) as well as made my layout "just work" in all the situations where previously it was glitchy. viewDidLoad, viewWillAppear etc are a poor substitute for layoutSubviews.
Then one day you'll strip all of the layout logic out of your view controller, delete your xib files, and instead create a set of uiview subclasses and override their layoutSubviews method. On that day you will be happy.
In almost every case I've encountered so far, doing this has cleaned up my code (removed kludges) as well as made my layout "just work" in all the situations where previously it was glitchy. viewDidLoad, viewWillAppear etc are a poor substitute for layoutSubviews.
I think the reason this makes my code feel cleaner is due to allowing me to implement "separation of concerns" http://c2.com/cgi/wiki?SeparationOfConcerns