pantalla - Diseño automático de iOS: espacios iguales para ajustar el ancho de las superviews
escala de grises ios 10 (1)
Posible duplicado:
Autolayout Even Spacing
UISegmentedControl
crear una barra desplazable con botones (similar a un UISegmentedControl
). La supervista es un UIScrollView
. Tan pronto como los botones no quepan en la vista de desplazamiento, la vista de desplazamiento debería ser desplazable. Hasta ahora, casi todo funciona bien:
Con muchos botones (desplazados hacia la derecha):
No hay tantos botones:
Ahora, mi objetivo es que si hay espacio para todos los botones, se distribuyan por igual en toda la vista de 320 píxeles. ¿Cómo puedo definir restricciones para los espacios entre los botones?
En este momento, estoy usando las siguientes restricciones (self es un UIScrollView
):
UIView *firstButton = self.buttons[0];
[self.buttonConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(5)-[firstButton]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(firstButton)]];
UIView *lastButton = [self.buttons lastObject];
[self.buttonConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"[lastButton]-(5)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(lastButton)]];
UIView *previousView = nil;
for (UIView *view in self.buttons) {
if (previousView) {
[self.buttonConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"[previousView]-(5)-[view]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(previousView, view)]];
}
previousView = view;
}
Si cambio el tipo de la supervista desde UIScrollView
a una UIView
, obtengo el siguiente resultado, que aún no es lo que quiero, pero al menos busca la restricción del último botón que lo vincula con el borde derecho (tiene sentido que esto no sucede para la vista de desplazamiento, ya que el tamaño del contenido se establece automáticamente):
¿Algunas ideas?
- (void) viewWillLayoutSubviews {
// UIButton *button1, *button2, *button3, *button 4 ;
// NSMutableArray *constraintsForButtons ;
float unusedHorizontalSpace = self.view.bounds.size.width - button1.intrinsicContentSize.width - button2.intrinsicContentSize.width - button3.intrinsicContentSize.width - button4.intrinsicContentSize.width ;
NSNumber* spaceBetweenEachButton= [NSNumber numberWithFloat: unusedHorizontalSpace / 5 ] ;
[self.view removeConstraints:constraintsForButtons] ;
[constraintsForButtons removeAllObjects] ;
[constraintsForButtons addObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat: @"H:|-(space)-[button1]-(space)-[button2]-(space)-[button3]-(space)-[button4]-(space)-|"
options: NSLayoutFormatAlignAllCenterY
metrics: @{@"space":spaceBetweenEachButton}
views: NSDictionaryOfVariableBindings(button1,button2,button3,button4) ] ] ;
[constraintsForButtons addObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat: @"V:|[button1]"
options: 0
metrics: nil
views: NSDictionaryOfVariableBindings(button1) ] ] ;
[self.view addConstraints:constraintsForButtons] ;
}
Esto no es tan bonito como el tuyo, y asume que hay 4 botones, pero igualmente los espacia. Es decir, los espacios vacíos entre los botones tienen todos el mismo ancho. Esto no significa que la distancia entre NSLayoutAttributeLeading de button1 y button2 sea la misma que la distancia entre button2 y button3.