         }
     }
     
+    func leftComponentsWidth(withComponentIndex index: Int) -> CGFloat {
+        return (0..<index).reduce(0.0) { $0 + componentWidth(of: components[$1]) }
+    }
+    
+    func labelFrame(withComponentIndex index: Int) -> CGRect {
+        let component = components[index]
+        let x = leftComponentsWidth(withComponentIndex: index)
+                + componentSidePadding(of: component)
+                + component.maxItemWidth
+                + separateWidth * CGFloat(index)
+        let y = bounds.height / 2.0 - rowHeight / 2.0
+        
+        return CGRect(x: x, y: y, width: components[index].labelNameWidth, height: rowHeight)
+    }
+    
     func setLabels() {
-        labels = components.enumerated().map { index, component in
+        labels = components.map { component in
             let label = UILabel()
             label.attributedText = component.attributedLabel
             label.textAlignment = .center

    
    var componentsSidePaddingSum: CGFloat {
        return componentsWidthSum - componentsMaxContentWidthSum
    }
    
    func componentSidePaddingSum(of component: PickerComponent) -> CGFloat {

        labels.forEach { addSubview($0) }
    }
    
    func updateLabelsFrame() {
        components.enumerated().forEach { index, component in
            labels[index].frame = labelFrame(withComponentIndex: index)
        }
    }
    
}
