Centrar el text del button UIB para el button de acción flotante como la aplicación Inbox

floatingButton = UIButton(x: blocx, y:blocy, width: imageSize, height: imageSize, target: self, action: "clickedFloatingButton") floatingButton!.backgroundColor = CozyColors.StatCardSkip floatingButton!.layer.cornerRadius = floatingButton!.frame.size.width / 2 floatingButton!.setTitle("+", forState: UIControlState.Normal) floatingButton!.setTitleColor(CozyColors.ThemeWhite, forState: UIControlState.Normal) floatingButton!.titleLabel?.font = UIFont(name: CozyStyles.ThemeFontName, size: imageSize*2/3) view.addSubview(floatingButton!) 

Aquí está el resultado:

aplicación de bandeja de entrada botón flotante acción

Como puede ver, el button más no está correctamente alineado con el centro. ¿Cómo puedo ponerlo en el medio sin agregar un UILabel como subvista?

Pruebe este código:

  var floatingButton = UIButton(frame: CGRectMake(10, 20, 50, 50)) floatingButton.backgroundColor = UIColor.networkingColor() floatingButton.layer.cornerRadius = floatingButton.frame.size.width / 2 floatingButton.setTitle("+", forState: UIControlState.Normal) floatingButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal) floatingButton.titleLabel?.font = UIFont(name: floatingButton.titleLabel!.font.familyName , size: 50) floatingButton.titleEdgeInsets = UIEdgeInsetsMake(-10, 0, 0, 0) view.addSubview(floatingButton) 

Bueno, creo que una forma más fácil es establecer una image de background para él

  floatingButton.setBackgroundImage(UIImage(named: "icon.png"), forState: UIControlState.Normal) 

Puedes aplicar la transformación o encontrar una image similar de google

introduzca la descripción de la imagen aquí

Y la image de background está aquí

introduzca la descripción de la imagen aquí

Establece su Recuadro de borde de título como se muestra a continuación. Cambie su valor y establezca el título en el medio.

 floatingButton.titleEdgeInsets = UIEdgeInsetsMake(-24, 0, 0, 0); 

según el valor de cambio de function a continuación.

 func UIEdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> UIEdgeInsets 

Simplemente puede dibujar su button con UIBezierPath y aquí está su código:

 import UIKit class PushButtonView: UIButton { override func drawRect(rect: CGRect) { var path = UIBezierPath(ovalInRect: rect) UIColor.networkingColor().setFill() path.fill() //set up the width and height variables //for the horizontal stroke let plusHeight: CGFloat = 3.0 let plusWidth: CGFloat = min(bounds.width, bounds.height) * 0.6 //create the path var plusPath = UIBezierPath() //set the path's line width to the height of the stroke plusPath.lineWidth = plusHeight //move the initial point of the path //to the start of the horizontal stroke plusPath.moveToPoint(CGPoint(x:bounds.width/2 - plusWidth/2 + 0.5, y:bounds.height/2 + 0.5)) //add a point to the path at the end of the stroke plusPath.addLineToPoint(CGPoint(x:bounds.width/2 + plusWidth/2 + 0.5, y:bounds.height/2 + 0.5)) //Vertical Line //move to the start of the vertical stroke plusPath.moveToPoint(CGPoint(x:bounds.width/2 + 0.5, y:bounds.height/2 - plusWidth/2 + 0.5)) //add the end point to the vertical stroke plusPath.addLineToPoint(CGPoint(x:bounds.width/2 + 0.5, y:bounds.height/2 + plusWidth/2 + 0.5)) //set the stroke color UIColor.whiteColor().setStroke() //draw the stroke plusPath.stroke() } } 

Y tu resultado será:

introduzca la descripción de la imagen aquí

Puede consultar ESTE proyecto de ejemplo para get más información. Y puedes modificarlo según tu necesidad.

Espero que te ayude.