ios - how - ¿Cómo cambiar el radio de la esquina de UISegmentedControl?
swift 4 segmented control example (8)
Actualizado para compatibilidad con Swift 3 y Xcode 8.2
mySegmentedControl.layer.cornerRadius = 25.0
mySegmentedControl.layer.borderColor = UIColor.white.cgColor
mySegmentedControl.layer.borderWidth = 1.0
mySegmentedControl.layer.masksToBounds = true
¿Es posible cambiar el radio de la esquina de UISegmentedControl? He intentado el siguiente enfoque que usamos para cambiar el radio de la esquina de un UIView.
self.segmentedControl.layer.cornerRadius = 15.0;
self.segmentedControl.layer.masksToBounds = YES;
Esto no funcionó, como puede ver, solo corta la esquina de UISegmentedControl.
¡Gracias!
El control segmentado no va a cambiar la forma en que dibuja sus esquinas, por lo que continúa dibujando sus esquinas a su manera y luego las está cortando. Usted no está a cargo de cómo un control segmentado dibuja su forma de contorno. Si realmente no te gusta la forma en que está dibujado, tendrás que diseñar tu propio control sustituto desde cero. Lo más cercano que puede llegar legítimamente al tipo de cosa que está tratando de hacer es establecer la imagen de fondo del control segmentado.
Este es un código convertido y de trabajo para Swift 4.1 y Xcode 9.3 de la publicación de Yakiv .
segmentedOuterView.layer.cornerRadius = segmentedOuterView.bounds.height / 2
segmentedOuterView.layer.borderColor = UIColor.red.cgColor
segmentedOuterView.layer.borderWidth = 1
segmentedOuterView.layer.masksToBounds = true
Esto debería funcionar:
self.segmentedControl.layer.cornerRadius = 15.0;
self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0f;
self.segmentedControl.layer.masksToBounds = YES;
Debe especificar el borde después de configurar cornerRadius.
Incruste UISegmentedControl dentro de UIView y establezca el radio de la esquina para UIView .
C objetivo
outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2;
outerView.layer.borderColor = [UIColor blueColor].CGColor;
outerView.layer.borderWidth = 1;
Rápido
outerView.layer.cornerRadius = CGRectGetHeight(outerView.bounds) / 2
outerView.layer.borderColor = UIColor.blueColor().CGColor
outerView.layer.borderWidth = 1
Las soluciones anteriores nunca funcionaron para mí. Mi solución es:
Para incrustar el UISegmentedControl
dentro de una supervisión, luego asigne -1 a las restricciones líder, final, inferior, superior, para cortar el borde UISegmentedControl
. Finalmente la supervisión debe ser configurada de esta manera:
segmentedControl.superview.clipsToBounds = true
segmentedControl.superview.layer.cornerRadius = 0 //whatever
segmentedControl.superview.layer.borderWidth = 1
segmentedControl.superview.layer.borderColor = segmentedControl.tintColor.CGColor
Su resultado es porque otra cosa (¿dibujo personalizado?) Controla el borde y no la capa. Por suerte parece que esa configuración de capa tiene prioridad.
Si sabe qué color de borde necesita, puede agregar (ejemplo):
self.segmentedControl.layer.borderColor = [UIColor whiteColor].CGColor;
self.segmentedControl.layer.borderWidth = 1.0;
Usa el siguiente código:
segmentContrl.layer.borderColor=*anycolor*.CGColor;
segmentContrl.layer.cornerRadius = 0.0;
segmentContrl.layer.borderWidth = 1.5f;