segmented objective how example control change ios uisegmentedcontrol

ios - objective - swift segmented control change view



iOS: cambie la altura de UISegmentedcontrol (16)

Agregar una restricción en IB también hará el truco:

Estoy tratando de cambiar la altura del control UISegmented, pero no está permitido en el Interface Builder. ¿Hay alguna manera de cambiar o es imposible?

Gracias


Agregue una nueva restricción de altura y establezca su valor.


La forma mejor y más simple de hacerlo es establecer la restricción de altura en el control segmentado y aumentar su valor según sea necesario.


La solución de Ji Fang no funcionó para mí. Tuve que subclasificar el control segmentado y agregar estos métodos. La solución basada en el diseño automático no es sólida en iOS7.0 /7.1. A veces salta a la altura predeterminada.

const static CGFloat kViewHeight = 35; - (void) layoutSubviews { [super layoutSubviews]; CGRect frame = self.frame; [self setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, kViewHeight)]; } - (CGSize) intrinsicContentSize { CGSize defaultSize = [super intrinsicContentSize]; return CGSizeMake(defaultSize.width, kViewHeight); }


Para hacerlo dentro de Interface Builder puede seleccionar el control y agregar el atributo de marco en "Atributos de tiempo de ejecución definidos por el usuario"


Para mí, la solución fue:

CGRect frame = CGRectMake (20, 20, 180, 50); self.segmentedControl.frame = frame;

Funciona en todas las versiones y sin usar el ajuste automático.


Puedes probar lo siguiente:

segmentedControll.addConstraint( NSLayoutConstraint( item: segmentedControll, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 40.0 ) )


Si está utilizando el diseño automático y tiene problemas con la respuesta de Luke , esto funcionó perfectamente para mí:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:mySegmentedControl attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:fNewHeight]; [mySegmentedControl addConstraint:constraint];


Si selecciona "Usar diseño automático", el cuadro de restablecimiento no funciona, debe cambiar las restricciones en su lugar. Tal vez es la razón por la cual la mejor respuesta no funciona para alguien, porque está seleccionada por defecto en xcode 5


Simplemente vaya a Storyboard donde se encuentra id UisegmentContrrole y configure la restricción de altura con sus alturas personalizadas como


Solo haga MySegmentedControl.frame = CGRectMake(15,5, 290, 50); y simplemente cambie las coordenadas para adaptarlas a su vista (Esto se actualiza para iOS 7)


Solución Swift:

override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) let rect = CGRect(origin: segment.frame.origin, size: CGSize(width: segment.frame.size.width, height: 100)) segment.frame = rect }

o

override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let rect = CGRect(origin: segment.frame.origin, size: CGSize(width: segment.frame.size.width, height: 100)) segment.frame = rect }

o

override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() let rect = CGRect(origin: segment.frame.origin, size: CGSize(width: segment.frame.size.width, height: 100)) segment.frame = rect }

Establece la altura de SegmentedControl en 100.


Solución Swift:

segmentedControl.frame = CGRect(x: segmentedControl.frame.origin.x, y: segmentedControl.frame.origin.y, width: segmentedControl.frame.size.width, height: 40);

establece la altura del SegmentedControl en 40.


Swift 3 Solución IBInspectable:

@IBDesignable class MySegmentedControl: UISegmentedControl { @IBInspectable var height: CGFloat = 29 { didSet { let centerSave = center frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: height) center = centerSave } } }


Afortunadamente también puedes cambiar la altura del xib .

Puedes hacerlo a través del xib también. Solo agrega un control de segmento en el xib . Luego abre el xib en TextEdit. Ahí encontrarás el código:

<segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="B99-Tt-vJG"> <rect key="frame" x="222" y="82" width="123" height="44"/>

Aquí cambia la altura de 44 a cualquier altura requerida. Puede cambiar la altura de cualquier UIConponent como este. Incluso para UIPickerView .


Sí, puede usar [mySegmentedControl setFrame:frame] en el código. Es lamentable que no puedas hacer esto en IB.

Entonces, si solo quieres cambiar la altura:

CGRect frame= mySegmentedControl.frame; [mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)];