         private let item: BarButtonItem
         private var _intrinsicContentSize: CGSize = .zero
 
-        init(frame: CGRect, item: BarButtonItem) {
+        init(item: BarButtonItem) {
           self.item = item
-          super.init(frame: frame)
-
+          super.init(frame: .zero)
+
+          translatesAutoresizingMaskIntoConstraints = false
+          snp.setLabel("action")
           accessibilityHint = item.accessibilityHint
 
           button.setImage(item.image?.withRenderingMode(.alwaysTemplate), for: .normal)
           button.addTarget(item, action: #selector(BarButtonItem.execute), for: .touchUpInside)
           addSubview(button)
+          button.snp.setLabel("action.button")
           button.snp.makeConstraints { make in
             make.size.equalTo(Metrics.ActionButton.size)
             make.top.equalToSuperview()

    private func updatePosition() {
      switch position {
      case .lowered:
        barWrapper.transform = CGAffineTransform(translationX: 0, y: barWrapper.bounds.height)
      case .raised:
        barWrapper.transform = .identity
      }
      updateAdditionalSafeAreaInsets()
    }

    private func updateAdditionalSafeAreaInsets() {
      if position == .raised, barWrapper.alpha > 0 {
        content.additionalSafeAreaInsets =
          UIEdgeInsets(top: 0, left: 0, bottom: barWrapper.bounds.height, right: 0)
      } else {
        content.additionalSafeAreaInsets = .zero
      }

    override func viewDidLoad() {
      super.viewDidLoad()

      // TODO: Figure out how to do this dynamically. Ideally we would get these from the margins
      // of the content view controller, but they're not what we want.
      view.layoutMargins = Metrics.Bar.defaultMargins
      // Ignore system mimimums because we want to use our custom margins.
      viewRespectsSystemMinimumLayoutMargins = false
      // Inset the layout margins from the edge, so we can keep the bar as close to the edge as
      // possible.
      view.insetsLayoutMarginsFromSafeArea = false
      view.snp.setLabel("root")

      content.view.snp.setLabel("content")
      addChild(content)
