 	}
 
 
+	public override func insertSubview(view: UIView, atIndex index: Int) {
+		guard !isTitleView(view) else {
+			titleContainerView.addSubview(view)
+			super.insertSubview(titleContainerView, atIndex: index)
+			return
+		}
+
+		super.insertSubview(view, atIndex: index)
+	}
+
+
+	public override func insertSubview(view: UIView, aboveSubview siblingSubview: UIView) {
+		guard !isTitleView(view) else {
+			titleContainerView.addSubview(view)
+			super.insertSubview(titleContainerView, aboveSubview: siblingSubview)
+			return
+		}
+
+		super.insertSubview(view, aboveSubview: isTitleView(siblingSubview) ? titleContainerView : siblingSubview)
+	}
+
+
+	public override func insertSubview(view: UIView, belowSubview siblingSubview: UIView) {
+		guard !isTitleView(view) else {
+			titleContainerView.addSubview(view)
+			super.insertSubview(titleContainerView, belowSubview: siblingSubview)
+			return
+		}
+
+		super.insertSubview(view, belowSubview: isTitleView(siblingSubview) ? titleContainerView : siblingSubview)
+	}
+
+
+	private func isTitleView(view: UIView, checkingSubviews: Bool = true) -> Bool {
+		return view === titleView || NSStringFromClass(view.dynamicType) == navigationItemViewClassName
+	}
+
+
+	public override func layoutSubviews() {
+		super.layoutSubviews()
+
+		titleContainerView.frame = CGRect(size: bounds.size)
+	}
+
+
 	internal var overridingTintColor: UIColor? {
 		didSet {
 			guard overridingTintColor != oldValue else {

		super.init(coder: coder)

		originalAlpha = alpha
	}





private let backgroundViewKey = ["_", "backgroundView"].joinWithSeparator("")
private let navigationItemViewClassName = ["UINavigationItem", "View"].joinWithSeparator("")
private let titleViewKey = ["_", "titleView"].joinWithSeparator("")


