segmented how example control ios cocoa-touch uiview uikit uisegmentedcontrol

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;