Swift button画像位置の設定

2494 ワード

  • は開発中にボタンとアイコンの配置の問題によく遭遇し、ボタンの中の画像と文字の位置を設定する必要がある場合がある.
  • の1つの方法は、titleEdgeInsets、imageEdgeInsetsの2つのプロパティを使用して、特定の場所を設定することです.もう1つは、buttonを定義するためにimageViewとlabelを直接カプセル化することです.どちらの方法も可能で、Swiftで拡張UIButtonを使用してtitleEdgeInsets、imageEdgeInsetsを設定すると、より柔軟で便利です.
  • 直接上コード:
    enum ButtonEdgeInsetsStyle {
       case ButtonEdgeInsetsStyleTop // image ,label 
       case ButtonEdgeInsetsStyleLeft  // image ,label 
       case ButtonEdgeInsetsStyleBottom  // image ,label 
       case ButtonEdgeInsetsStyleRight // image ,label 
    }
    
    extension UIButton {
        func layoutButtonEdgeInsets(style:ButtonEdgeInsetsStyle,space:CGFloat) {
          var labelWidth : CGFloat = 0.0
          var labelHeight : CGFloat = 0.0
          var imageEdgeInset = UIEdgeInsetsZero
          var labelEdgeInset = UIEdgeInsetsZero
          let imageWith = self.imageView?.frame.size.width
          let imageHeight = self.imageView?.frame.size.height
          if Double(UIDevice.currentDevice().systemVersion) >= 8.0 {
               labelWidth = (self.titleLabel?.intrinsicContentSize().width)!
               labelHeight = (self.titleLabel?.intrinsicContentSize().height)!
          }else {
              labelWidth = (self.titleLabel?.frame.size.width)!
              labelHeight = (self.titleLabel?.frame.size.height)!
          }
          labelWidth = CGFloat(36)
          switch style {
          case .ButtonEdgeInsetsStyleTop:
              imageEdgeInset = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth)
              labelEdgeInset = UIEdgeInsetsMake(0, -imageWith!, -imageHeight!-space/2.0, 0)
          case .ButtonEdgeInsetsStyleLeft:
            imageEdgeInset = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);
            labelEdgeInset = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0);
          case .ButtonEdgeInsetsStyleBottom:
              imageEdgeInset = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth)
              labelEdgeInset = UIEdgeInsetsMake(-imageHeight!-space/2.0, -imageWith!, 0, 0)
          case .ButtonEdgeInsetsStyleRight:
              // To Do print(" ====\(labelWidth)=====\(space)")
              imageEdgeInset = UIEdgeInsetsMake(0, labelWidth+space/2.0, 0, -labelWidth-space/2.0)
              labelEdgeInset = UIEdgeInsetsMake(0, -imageWith!-space/2.0, 0, imageWith!+space/2.0)
          }
          self.titleEdgeInsets = labelEdgeInset
          self.imageEdgeInsets = imageEdgeInset
      }
    }
    
  • コードに示すように、画像と文字が現れる可能性のある位置を列挙することによって、方法の中で具体的な状況に応じて文字と画像の位置を示すことができる.第2の方法についてはxibまたは純粋なコードでbuttonをカプセル化することができますが、ここでは説明しません.