         y += size.height + padding
       }
 
-      if let textNode = textNode {
-        let size = textNode.calculatedSize
-        textNode.frame = CGRect(
-          x: 0, y: y,
-          width: width, height: size.height)
-        y += size.height + padding
+      let rowHeight = textRowHeight()
+      if rowHeight > 0 {
+        if let textNode = textNode {
+          let size = textNode.calculatedSize
+          var rowX = (width - size.width) / CGFloat(2)
+
+          if let iconNode = iconNode {
+            let iconWidth = infoConfig.text.icon.padding
+              + infoConfig.text.icon.size.width
+            rowX -= iconWidth / CGFloat(2)
+
+            let size = infoConfig.text.icon.size
+            iconNode.frame = CGRect(
+              x: rowX,
+              y: y + (rowHeight - size.height) / CGFloat(2),
+              width: size.width,
+              height: size.height)
+
+            rowX += iconWidth
+          }
+
+          textNode.frame = CGRect(
+            x: rowX,
+            y: y + (rowHeight - size.height) / CGFloat(2),
+            width: size.width,
+            height: size.height)
+
+          y += rowHeight + padding
+        }
       }
 
       if let divider = divider {

        height += size.height + infoConfig.verticalPadding
      }

      if let textNode = textNode {
        let size = textNode.measure(CGSize(
          width: width,
          height: CGFloat(FLT_MAX)))
        height += size.height + infoConfig.verticalPadding
      }

      if let divider = divider {

  public var config: Config?

  var titleNode: ASTextNode?
  var iconNode: ASImageNode?
  var textNode: ASTextNode?
  var divider: ASDisplayNode?

