Przeglądaj źródła

【综合】代码布局优化

tangchao 1 rok temu
rodzic
commit
d6ec5fd795

+ 511 - 0
PDF Office/PDF Master/Class/Common/Category/NSView+KMExtension.swift

@@ -101,3 +101,514 @@ extension NSView: KMLoadingProtocol {
     
     @objc private func loadingMask_Click() {}
 }
+
+// MARK: - layout code
+
+extension NSView {
+    // MARK: - Quick Methods
+    
+    public func km_add_inset_constraint(equalTo targetV: NSView? = nil, inset: NSEdgeInsets = NSEdgeInsetsZero) -> Void {
+        self.km_add_leading_constraint(equalTo: targetV, constant: inset.left)
+        self.km_add_trailing_constraint(equalTo: targetV, constant: -inset.right)
+        self.km_add_top_constraint(equalTo: targetV, constant: inset.top)
+        self.km_add_bottom_constraint(equalTo: targetV, constant: -inset.bottom)
+    }
+    
+    public func km_add_size_constraint(equalTo targetV: NSView? = nil, size: NSSize) -> Void {
+        self.km_add_width_constraint(equalTo: targetV, constant: size.width)
+        self.km_add_height_constraint(equalTo: targetV, constant: size.height)
+    }
+    
+    // MARK: - Add Constraint
+    
+    public func km_add_leading_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .leading, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_leading_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_trailing_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .trailing, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_trailing_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_left_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .left, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_left_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_right_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .right, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_right_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_top_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .top, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_top_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_bottom_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .bottom, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_bottom_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_width_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .width, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_width_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_height_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .height, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_height_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_centerX_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .centerX, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_centerX_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    public func km_add_centerY_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .centerY, constant c: CGFloat = 0) -> Void {
+        let _ = self.km_add_centerY_constraint_r(equalTo: targetV, attribute: a, constant: c)
+    }
+    
+    // MARK: - Add Constraint 【返回 NSLayoutConstraint 对象】
+    
+    public func km_add_leading_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .leading, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_leading_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _constraint = constraint {
+            self.superview?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    public func km_add_trailing_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .trailing, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_trailing_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _constraint = constraint {
+            self.superview?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    public func km_add_left_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .left, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_left_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _constraint = constraint {
+            self.superview?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    public func km_add_right_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .right, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_right_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _constraint = constraint {
+            self.superview?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    public func km_add_top_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .top, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_top_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _constraint = constraint {
+            self.superview?.addConstraint(_constraint)
+        }
+
+        return constraint
+    }
+    
+    public func km_add_bottom_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .bottom, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_bottom_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _constraint = constraint {
+            self.superview?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    public func km_add_width_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .width, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_width_constraint(equalTo: targetV, attribute: a, constant: c)
+
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = self.superview
+        } else {
+            _targetV = self
+        }
+        if let _constraint = constraint {
+            _targetV?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    public func km_add_height_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .height, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_height_constraint(equalTo: targetV, attribute: a, constant: c)
+  
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = self.superview
+        } else {
+            _targetV = self
+        }
+        if let _constraint = constraint {
+            _targetV?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    public func km_add_centerX_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .centerX, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_centerX_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _constraint = constraint {
+            self.superview?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    public func km_add_centerY_constraint_r(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .centerY, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        let constraint = self.km_centerY_constraint(equalTo: targetV, attribute: a, constant: c)
+        if let _constraint = constraint {
+            self.superview?.addConstraint(_constraint)
+        }
+        
+        return constraint
+    }
+    
+    // MARK: - NSLayoutXAxisAnchor
+    
+    public func km_leading_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .leading, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_x_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .leading) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        }
+        return constraint!
+    }
+    
+    public func km_trailing_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .trailing, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_x_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .leading) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        }
+        
+        return constraint
+    }
+    
+    public func km_left_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .left, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_x_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .leading) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.leftAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        }
+        
+        return constraint
+    }
+    
+    public func km_right_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .right, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_x_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .leading) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.rightAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        }
+        
+        return constraint
+    }
+    
+    public func km_centerX_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .centerX, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_x_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var constraint: NSLayoutConstraint?
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        if (a == .leading) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
+        } else if (a == .trailing) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
+        } else if (a == .left) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
+        } else if (a == .right) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
+        } else if (a == .centerX) {
+            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
+        }
+        return constraint
+    }
+    
+    // MARK: - NSLayoutYAxisAnchor
+    
+    public func km_top_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .top, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_y_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutYAxisAnchor. eg top | bottom | centerY.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+            constraint = self.topAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+            constraint = self.topAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .centerY) {
+            constraint = self.topAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint
+    }
+    
+    public func km_bottom_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .bottom, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_y_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutYAxisAnchor. eg top | bottom | centerY.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .top) {
+            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .centerY) {
+            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint
+    }
+    
+    public func km_centerY_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .centerY, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_y_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutYAxisAnchor. eg top | bottom | centerY.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var constraint: NSLayoutConstraint?
+        var _targetV: NSView?
+        if let _ = targetV {
+            _targetV = targetV
+        } else {
+            _targetV = self.superview
+        }
+        
+        if (a == .top) {
+            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
+        } else if (a == .bottom) {
+            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
+        } else if (a == .centerY) {
+            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
+        }
+        return constraint
+    }
+    
+    // MARK: - NSLayoutDimension
+    
+    public func km_width_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .width, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_dimension_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutDimension. eg width | height.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .width) {
+            if let _targetV = targetV {
+                constraint = self.widthAnchor.constraint(equalTo: _targetV.widthAnchor, constant: c)
+            } else {
+                constraint = self.widthAnchor.constraint(equalToConstant: c)
+            }
+        } else if (a == .height) {
+            if let _targetV = targetV {
+                constraint = self.widthAnchor.constraint(equalTo: _targetV.heightAnchor, constant: c)
+            } else {
+                constraint = self.widthAnchor.constraint(equalToConstant: c)
+            }
+        }
+        return constraint!
+    }
+    
+    public func km_height_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute = .height, constant c: CGFloat = 0) -> NSLayoutConstraint? {
+        if (!self._km_layout_is_dimension_anchor(attribute: a)) {
+            Swift.debugPrint(a)
+            #if DEBUG
+            assert(false, "need NSLayoutDimension. eg width | height.")
+            #endif
+            return nil
+        }
+        
+        self._km_layout_setup()
+        
+        var constraint: NSLayoutConstraint?
+        if (a == .width) {
+            if let _targetV = targetV {
+                constraint = self.heightAnchor.constraint(equalTo: _targetV.widthAnchor, constant: c)
+            } else {
+                constraint = self.heightAnchor.constraint(equalToConstant: c)
+            }
+        } else if (a == .height) {
+            if let _targetV = targetV {
+                constraint = self.heightAnchor.constraint(equalTo: _targetV.heightAnchor, constant: c)
+            } else {
+                constraint = self.heightAnchor.constraint(equalToConstant: c)
+            }
+        }
+        return constraint
+    }
+    
+    // MARK: - Private Methods
+    
+    private func _km_layout_setup() {
+        self.translatesAutoresizingMaskIntoConstraints = false
+    }
+    
+    private func _km_layout_is_x_anchor(attribute a: NSLayoutConstraint.Attribute) -> Bool {
+        if (a == .leading || a == .trailing || a == .left || a == .right || a == .centerX) {
+            return true
+        }
+        return false
+    }
+    
+    private func _km_layout_is_y_anchor(attribute a: NSLayoutConstraint.Attribute) -> Bool {
+        if (a == .top || a == .bottom || a == .centerY) {
+            return true
+        }
+        return false
+    }
+    
+    private func _km_layout_is_dimension_anchor(attribute a: NSLayoutConstraint.Attribute) -> Bool {
+        if (a == .width || a == .height) {
+            return true
+        }
+        return false
+    }
+}
+

+ 8 - 467
PDF Office/PDF Master/Class/PDFTools/Convert/View/KMConvertSettingLimitTipView.swift

@@ -51,23 +51,17 @@ class KMConvertSettingLimitTipView: NSView {
         self._funcButtonVC?.target = self
         self._funcButtonVC?.action = #selector(funcAction)
         
-        let _ = self.contentView.km_add_leading_constraint(attribute: .leading, constant: 0)
-        let _ = self.contentView.km_add_trailing_constraint(attribute: .trailing, constant: 0)
-        let _ = self.contentView.km_add_top_constraint(attribute: .top, constant: 0)
-        let _ = self.contentView.km_add_bottom_constraint(attribute: .bottom, constant: 0)
+        self.contentView.km_add_inset_constraint()
         
-        let _ = self._iconIv.km_add_leading_constraint(attribute: .leading, constant: 10)
-        let _ = self._iconIv.km_add_centerY_constraint(attribute: .centerY, constant: 0)
+        self._iconIv.km_add_leading_constraint(constant: 10)
+        self._iconIv.km_add_centerY_constraint()
         
-        let _ = self._textField.km_add_leading_constraint(equalTo: self._iconIv, attribute: .trailing, constant: 5)
-        let _ = self._textField.km_add_centerY_constraint(equalTo: self._iconIv, attribute: .centerY, constant: 0)
+        self._textField.km_add_leading_constraint(equalTo: self._iconIv, attribute: .trailing, constant: 5)
+        self._textField.km_add_centerY_constraint(equalTo: self._iconIv)
         
-        let _ = self._funcBox.km_add_leading_constraint(equalTo: self._textField, attribute: .trailing, constant: 0)
-        let _ = self._funcBox.km_add_centerY_constraint(equalTo: self._iconIv, attribute: .centerY, constant: 0)
-        let _ = self._funcBox.km_add_width_constraint(attribute: .width, constant: 60)
-        let _ = self._funcBox.km_add_height_constraint(attribute: .height, constant: 30)
-        
-//        self._funcBox.km_add_centerY_constraint(attribute: .left, constant: 0)
+        self._funcBox.km_add_leading_constraint(equalTo: self._textField, attribute: .trailing)
+        self._funcBox.km_add_centerY_constraint(equalTo: self._iconIv)
+        self._funcBox.km_add_size_constraint(size: NSMakeSize(60, 30))
     }
     
     func initDefaultValue() {
@@ -89,456 +83,3 @@ class KMConvertSettingLimitTipView: NSView {
         callback(1)
     }
 }
-extension NSView {
-    public func km_add_leading_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        let constraint = self.km_leading_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _constraint = constraint {
-            self.superview?.addConstraint(_constraint)
-        }
-        
-        return constraint
-    }
-    
-    public func km_add_trailing_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        let constraint = self.km_trailing_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _constraint = constraint {
-            self.superview?.addConstraint(_constraint)
-        }
-        
-        return constraint
-    }
-    
-    public func km_add_left_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        let constraint = self.km_left_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _constraint = constraint {
-            self.superview?.addConstraint(_constraint)
-        }
-        
-        return constraint
-    }
-    
-    public func km_add_right_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        let constraint = self.km_right_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _constraint = constraint {
-            self.superview?.addConstraint(_constraint)
-        }
-        
-        return constraint
-    }
-    
-    public func km_add_top_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        let constraint = self.km_top_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _constraint = constraint {
-            self.superview?.addConstraint(_constraint)
-        }
-
-        return constraint
-    }
-    
-    public func km_add_bottom_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        let constraint = self.km_bottom_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _constraint = constraint {
-            self.superview?.addConstraint(_constraint)
-        }
-        
-        return constraint
-    }
-    
-    public func km_add_width_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
-        let constraint = self.km_width_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _ = targetV {
-            self.superview?.addConstraint(constraint)
-        } else {
-            self.addConstraint(constraint)
-        }
-        return constraint
-    }
-    
-    public func km_add_height_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
-        let constraint = self.km_height_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _ = targetV {
-            self.superview?.addConstraint(constraint)
-        } else {
-            self.addConstraint(constraint)
-        }
-        return constraint
-    }
-    
-    public func km_add_centerX_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        let constraint = self.km_centerX_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _constraint = constraint {
-            self.superview?.addConstraint(_constraint)
-        }
-        
-        return constraint
-    }
-    
-    public func km_add_centerY_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        let constraint = self.km_centerY_constraint(equalTo: targetV, attribute: a, constant: c)
-        if let _constraint = constraint {
-            self.superview?.addConstraint(_constraint)
-        }
-        
-        return constraint
-    }
-    
-    // MARK: - NSLayoutXAxisAnchor
-    
-    public func km_leading_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        if (!self._km_layout_is_x_anchor(attribute: a)) {
-            Swift.debugPrint(a)
-            #if DEBUG
-            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
-            #endif
-            return nil
-        }
-        
-        self._km_layout_setup()
-        
-        var _targetV: NSView?
-        if let _ = targetV {
-            _targetV = targetV
-        } else {
-            _targetV = self.superview
-        }
-        
-        var constraint: NSLayoutConstraint?
-        if (a == .leading) {
-            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
-        } else if (a == .trailing) {
-            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
-        } else if (a == .left) {
-            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
-        } else if (a == .right) {
-            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
-        } else if (a == .centerX) {
-            constraint = self.leadingAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
-        }
-        return constraint!
-    }
-    
-    public func km_trailing_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        if (!self._km_layout_is_x_anchor(attribute: a)) {
-            Swift.debugPrint(a)
-            #if DEBUG
-            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
-            #endif
-            return nil
-        }
-        
-        self._km_layout_setup()
-        
-        var _targetV: NSView?
-        if let _ = targetV {
-            _targetV = targetV
-        } else {
-            _targetV = self.superview
-        }
-        
-        var constraint: NSLayoutConstraint?
-        if (a == .leading) {
-            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
-        } else if (a == .trailing) {
-            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
-        } else if (a == .left) {
-            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
-        } else if (a == .right) {
-            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
-        } else if (a == .centerX) {
-            constraint = self.trailingAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
-        }
-        
-        return constraint
-    }
-    
-    public func km_left_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        if (!self._km_layout_is_x_anchor(attribute: a)) {
-            Swift.debugPrint(a)
-            #if DEBUG
-            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
-            #endif
-            return nil
-        }
-        
-        self._km_layout_setup()
-        
-        var _targetV: NSView?
-        if let _ = targetV {
-            _targetV = targetV
-        } else {
-            _targetV = self.superview
-        }
-        
-        var constraint: NSLayoutConstraint?
-        if (a == .leading) {
-            constraint = self.leftAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
-        } else if (a == .trailing) {
-            constraint = self.leftAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
-        } else if (a == .left) {
-            constraint = self.leftAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
-        } else if (a == .right) {
-            constraint = self.leftAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
-        } else if (a == .centerX) {
-            constraint = self.leftAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
-        }
-        
-        return constraint
-    }
-    
-    public func km_right_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        if (!self._km_layout_is_x_anchor(attribute: a)) {
-            Swift.debugPrint(a)
-            #if DEBUG
-            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
-            #endif
-            return nil
-        }
-        
-        self._km_layout_setup()
-        
-        var _targetV: NSView?
-        if let _ = targetV {
-            _targetV = targetV
-        } else {
-            _targetV = self.superview
-        }
-        
-        var constraint: NSLayoutConstraint?
-        if (a == .leading) {
-            constraint = self.rightAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
-        } else if (a == .trailing) {
-            constraint = self.rightAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
-        } else if (a == .left) {
-            constraint = self.rightAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
-        } else if (a == .right) {
-            constraint = self.rightAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
-        } else if (a == .centerX) {
-            constraint = self.rightAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
-        }
-        
-        return constraint
-    }
-    
-    public func km_centerX_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        if (!self._km_layout_is_x_anchor(attribute: a)) {
-            Swift.debugPrint(a)
-            #if DEBUG
-            assert(false, "need NSLayoutXAxisAnchor. eg leading | trailing | left | right | centerX.")
-            #endif
-            return nil
-        }
-        
-        self._km_layout_setup()
-        
-        var constraint: NSLayoutConstraint?
-        var _targetV: NSView?
-        if let _ = targetV {
-            _targetV = targetV
-        } else {
-            _targetV = self.superview
-        }
-        
-        if (a == .leading) {
-            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
-        } else if (a == .trailing) {
-            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
-        } else if (a == .left) {
-            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
-        } else if (a == .right) {
-            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
-        } else if (a == .centerX) {
-            constraint = self.centerXAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
-        }
-        return constraint
-    }
-    
-    // MARK: - NSLayoutYAxisAnchor
-    
-    public func km_top_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        if (!self._km_layout_is_y_anchor(attribute: a)) {
-            Swift.debugPrint(a)
-            #if DEBUG
-            assert(false, "need NSLayoutYAxisAnchor. eg top | bottom | centerY.")
-            #endif
-            return nil
-        }
-        
-        self._km_layout_setup()
-        
-        var _targetV: NSView?
-        if let _ = targetV {
-            _targetV = targetV
-        } else {
-            _targetV = self.superview
-        }
-        
-        var constraint: NSLayoutConstraint?
-        if (a == .top) {
-            constraint = self.topAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
-        } else if (a == .bottom) {
-            constraint = self.topAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
-        } else if (a == .centerY) {
-            constraint = self.topAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
-        }
-        return constraint
-    }
-    
-    public func km_bottom_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        if (!self._km_layout_is_y_anchor(attribute: a)) {
-            Swift.debugPrint(a)
-            #if DEBUG
-            assert(false, "need NSLayoutYAxisAnchor. eg top | bottom | centerY.")
-            #endif
-            return nil
-        }
-        
-        self._km_layout_setup()
-        
-        var _targetV: NSView?
-        if let _ = targetV {
-            _targetV = targetV
-        } else {
-            _targetV = self.superview
-        }
-        
-        var constraint: NSLayoutConstraint?
-        if (a == .top) {
-            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
-        } else if (a == .bottom) {
-            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
-        } else if (a == .centerY) {
-            constraint = self.bottomAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
-        }
-        return constraint
-    }
-    
-    public func km_centerY_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint? {
-        if (!self._km_layout_is_y_anchor(attribute: a)) {
-            Swift.debugPrint(a)
-            #if DEBUG
-            assert(false, "need NSLayoutYAxisAnchor. eg top | bottom | centerY.")
-            #endif
-            return nil
-        }
-        
-        self._km_layout_setup()
-        
-        var constraint: NSLayoutConstraint?
-        var _targetV: NSView?
-        if let _ = targetV {
-            _targetV = targetV
-        } else {
-            _targetV = self.superview
-        }
-        
-        if (a == .top) {
-            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
-        } else if (a == .bottom) {
-            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
-        } else if (a == .centerY) {
-            constraint = self.centerYAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
-        }
-        return constraint
-    }
-    
-    // MARK: - NSLayoutDimension
-    
-    public func km_width_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
-        self._km_layout_setup()
-        
-        var constraint: NSLayoutConstraint?
-        if (a == .top) {
-//            constraint = self.widthAnchor.constraint(equalTo: targetV!.topAnchor, constant: c)
-        } else if (a == .bottom) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
-        } else if (a == .leading) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
-        } else if (a == .trailing) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
-        } else if (a == .left) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
-        } else if (a == .right) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
-        } else if (a == .width) {
-            if let _targetV = targetV {
-                constraint = self.widthAnchor.constraint(equalTo: _targetV.widthAnchor, constant: c)
-            } else {
-                constraint = self.widthAnchor.constraint(equalToConstant: c)
-            }
-        } else if (a == .height) {
-            if let _targetV = targetV {
-                constraint = self.widthAnchor.constraint(equalTo: _targetV.heightAnchor, constant: c)
-            } else {
-                constraint = self.widthAnchor.constraint(equalToConstant: c)
-            }
-        } else if (a == .centerX) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
-        } else if (a == .centerY) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
-        }
-        return constraint!
-    }
-    
-    public func km_height_constraint(equalTo targetV: NSView? = nil, attribute a: NSLayoutConstraint.Attribute, constant c: CGFloat) -> NSLayoutConstraint {
-        self._km_layout_setup()
-        
-        var constraint: NSLayoutConstraint?
-        if (a == .top) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.topAnchor, constant: c)
-        } else if (a == .bottom) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.bottomAnchor, constant: c)
-        } else if (a == .leading) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.leadingAnchor, constant: c)
-        } else if (a == .trailing) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.trailingAnchor, constant: c)
-        } else if (a == .left) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.leftAnchor, constant: c)
-        } else if (a == .right) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.rightAnchor, constant: c)
-        } else if (a == .width) {
-            if let _targetV = targetV {
-                constraint = self.heightAnchor.constraint(equalTo: _targetV.widthAnchor, constant: c)
-            } else {
-                constraint = self.heightAnchor.constraint(equalToConstant: c)
-            }
-        } else if (a == .height) {
-            if let _targetV = targetV {
-                constraint = self.heightAnchor.constraint(equalTo: _targetV.heightAnchor, constant: c)
-            } else {
-                constraint = self.heightAnchor.constraint(equalToConstant: c)
-            }
-        } else if (a == .centerX) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.centerXAnchor, constant: c)
-        } else if (a == .centerY) {
-//            constraint = self.widthAnchor.constraint(equalTo: _targetV!.centerYAnchor, constant: c)
-        }
-        return constraint!
-    }
-    
-    // MARK: - Private Methods
-    
-    private func _km_layout_setup() {
-        self.translatesAutoresizingMaskIntoConstraints = false
-    }
-    
-    private func _km_layout_is_x_anchor(attribute a: NSLayoutConstraint.Attribute) -> Bool {
-        if (a == .leading || a == .trailing || a == .left || a == .right || a == .centerX) {
-            return true
-        }
-        return false
-    }
-    
-    private func _km_layout_is_y_anchor(attribute a: NSLayoutConstraint.Attribute) -> Bool {
-        if (a == .top || a == .bottom || a == .centerY) {
-            return true
-        }
-        return false
-    }
-    
-    private func _km_layout_is_dimension_anchor(attribute a: NSLayoutConstraint.Attribute) -> Bool {
-        if (a == .width || a == .height) {
-            return true
-        }
-        return false
-    }
-}