downloads developer apple swift3 ios10 swift2.3

swift3 - developer - cornerRadius dejó de funcionar en Swift 2.3/iOS 10/Xcode 8



xcode 9.3 download (12)

Como Rob contestó, moví el código de viewDidLoad a viewDidAppear y el problema se solucionó.

O al agregar self.view.layoutIfNeeded() antes de que su código en viewDidLoad también resuelva el problema.

En el caso de UITableViewCell, Inside awakeFromNib add [self layoutIfNeeded]; antes de actualizar el radio de la esquina debería resolver todos los problemas.

Tengo un cornerRadius configurado en una UIView y un UIImageView dentro de la misma UIView . Estoy calculando el radio de la esquina con RockProfileView.frame.size.height / 2 pero UIView dejó de mostrarse en iOS 10.

Después de seguir comprobando, encontré que el valor de RockProfileView.frame.size.height / 2 está saliendo a ser 1000.0 mientras que la restricción de ancho y altura está configurada en 64.0

Cuando RockProfileView.layer.cornerRadius = 32 a 64/2 funciona bien.

Cual podría ser el problema ?

Código completo:

RockProfileView.layer.cornerRadius = RockProfileView.frame.size.height / 2 RockProfileView.clipsToBounds = true RockProgressView.layer.masksToBounds = true


Como se mencionó en una respuesta anterior, agregar self.layoutIfNeeded() antes de cambiar el radio de la esquina funcionó para mí.


En WWDC 2016 | Lo nuevo en Diseño automático, Apple recomienda una forma de autodiseño llamada

Adoptar incrementalmente Autolayout

Significa que si el diseño es fácil, puede usar el ajuste automático. Y se traducirá en restricciones en el tiempo de ejecución.

Por lo tanto, una de las soluciones es el uso del ajuste automático, y puede obtener el marco correcto sobre la vista en cualquier momento. Pero la premisa es que el ajuste automático puede satisfacer su diseño


Marcados con @IBInspectable in swift (o IBInspectable en Objective-C), son fácilmente editables en el panel de inspectores de atributos de Interface Builder.
Puede establecer cornerRadius directamente en el inspector de atributos

extension UIView { @IBInspectable var cornerRadius: CGFloat { get{ return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } }


Para mí, lo que funcionó fue la primera llamada layout IfNeeded y más tarde en el set cornerRadius


Si está dentro de uno de ViewControllers , en lugar de mover todas las operaciones de capa a viewDidLayer , mueva ese código dentro de DispatchQueue . Esto funcionó para mí:

DispatchQueue.main.async { let layer = self.signUpBtn.layer layer.borderColor = UIColor.white.cgColor layer.borderWidth = 2 / UIScreen.main.scale }

Espero que esto te ayude


Terminé este código en awakeFromNib , pero después de actualizar a ios 10 + xcode 8, dejó de funcionar.

Luego moví este código al método layoutSubViews . Entonces funcionó.

Esperando, esto te será útil.

Si todavía desea hacer esto en awakefromnib, haga esto después de poner algo de retraso (utilizando dispatch_after o NSOperatinQueue o performSelectorWithDelay)


Tuve el mismo problema, iOS 10 solamente. Descubrí que ViewDidLayoutSubviews o ViewDidLoad (posiblemente otros también, pero no los verifiqué) solo funcionaron si envolví el código de diseño en la cola de envío como sugería YPK.

Estoy usando Xamarin así que la sintaxis es un poco diferente:

DispatchQueue.MainQueue.DispatchAsync(() => { SetYourViewProperties(); });


Tuve que ejecutarlo en el hilo principal para que funcione.

dispatch_async(dispatch_get_main_queue(), ^{ [imageView.layer setCornerRadius:4]; [imageView.layer setMasksToBounds:YES]; });


Una cosa nueva en XCode8 no podemos establecer directamente el cornerRadius de la capa.

Cuando desee aplicar cornerRadius de UIView, necesita agregar una línea de código antes de aplicar cornerRadius.

yourButton.layoutIfNeeded ()

Ejemplo en Objective C.

[yourButton layoutIfNeeded]; yourButton.layer.cornerRadius = yourButton.frame.size.height/2; [[yourButton layer] setBorderWidth:2.0f]; Example into Swift3 self.layoutIfNeeded() yourButton.layer.cornerRadius = self.frame.height / 2.0 yourButton.layer.borderWidth = 2.0


veloz 3

Voy a probar este código para definir el radio de la esquina de UIImageview

imgProfile.layer.cornerRadius = imgProfile.frame.size.width / 2 imgProfile.clipsToBounds = true


Solución Swift 3.2

En caso de que alguien todavía tenga este problema, resolví el problema redondeando las celdas (o cualquiera de sus subvistas) en viewDidLayoutSubviews.

override func viewDidLayoutSubviews() { if (tableView.visibleCells.count > 0) { for cell in tableView.visibleCells { let customCell = cell as! CustomCell // Use any rounding method you use customCell.exampleSubview.roundCorners(corners: .allCorners, radius: 6) customCell.exampleSubview.layoutIfNeeded() } } }