I assume you are advanced iOS developer, know most of its internals and understand that this code/article is more proof of concept than working port (even if it kind of works). Nice, project starts without errors, but we see nothing on the screen. First we need to populate our class with data from XIB unarchiver. This is quit easy, just [aDecoder decodeIntegerForKey:@"..."] and set it where it belongs. Now we have our NSLayoutConstraint with all data from Interface Builder, but it gets dealloc'ed as soon as it created - we need to hold onto it. From Apple docs we see that UIView holds all its constraints, but views on iOS5 don't have all those ivars and methods to hold them... Adding methods is quite easy, everyone who reads this is already familiar with categories and if not..., well you shouldn't be reading this :) So as I wrote - we need clever way to store constraints in UIView on iOS5 and leverage all of its memory management. Lets start with -[UIView constraints] and -[UIView addConstraint:]. We don't want just drop those into category of UIView because they would conflict on iOS6 default implementation, so we need magic of <objc/runtime.h> again. First lets check if we not running in iOS6 if( ![[UIView class] respondsToSelector:@selector(requiresConstraintBasedLayout)] ) if not - insert our custom implementation of methods with default names of iOS6 - class_addMethod. Ok, so far so good, we have nonconflicting implementation in iOS5 witch does nothing in iOS6, now... were to store those constraints... (as you know categories don't have ivars). For this we will use quite new <objc/runtime.h> magic (this works from 10.6 as I remember) objc_setAssociatedObject.