                 yOffset = self.contentInset.top
             }
             
-            // special cases
-            #if os(iOS)
-            if subview is UIToolbar || subview is UINavigationBar {
+            // special cases, UIToolbar + UINavigationBar are not to be trifled with in iOS 11
+            var forceLayout: Bool
+            if isToolbarOrNavigationBar(subview) {
                 frame = CGRect(x: xOffset, y: yOffset, width: constrainedInsetSize.width, height: size.height)
+                forceLayout = false
             } else {
                 frame = CGRect(origin: CGPoint(x: xOffset, y: yOffset), size: size)
+                forceLayout = true
             }
-            #else
-            if subview is UINavigationBar {
-                frame = CGRect(x: xOffset, y: yOffset, width: constrainedInsetSize.width, height: size.height)
-            } else {
-                frame = CGRect(origin: CGPoint(x: xOffset, y: yOffset), size: size)
-            }
-            #endif
             
             yOffset += frame.size.height
             
             if applySizingLayout {
                 subview.frame = frame
-                subview.setNeedsLayout()
+                if forceLayout {
+                    subview.setNeedsLayout()
+                }
                 subview.layoutIfNeeded()
             }
         }

        self.delegate?.stackableViewContainer?(self, willRemoveSubview: subview)
    }
    
}

@objc protocol AXStackableViewContainerDelegate: class {

    init(views: [UIView], anchoredAt point: AXStackableViewContainerAnchorPoint) {
        self.anchorPoint = point
        super.init(frame: .zero)
        views.forEach({ self.addSubview($0) })
    }
    
    required public init?(coder aDecoder: NSCoder) {
