2011-02-09 9 views
5

Estoy tratando de encontrar una manera limpia de hacer que un UIToolbar solo sea lo ancho que necesita para ajustarse a los elementos que contiene. ¿Hay alguna forma de:¿Tamaño una UIToolbar para caber sus artículos?

  • ¿Configurar el UIToolbar para ajustar su ancho automáticamente a medida que se cambian sus elementos?
  • ¿Determina de forma programática el ancho mínimo requerido por los artículos, que luego se puede usar para establecer el marco de UIToolbar?

no he sido capaz de resolver esto debido a la separación entre los elementos y el hecho de que UIBarButtonItem s no son UIView subclases.

Respuesta

0

Acabo de consultar la documentación y parece que UIBarButtonItems, a pesar de que no son subclases de UIView, tienen un atributo width. No lo intenté yo mismo, pero creo que podrías sumar el ancho de cada elemento, incluido el artículo flexible, y obtener el ancho de tu barra de herramientas. Espero que ayude! ;)

+4

Estoy bastante seguro de que el ancho es 0 a menos que se establezca explícitamente. –

2

Después de probar algunas sugerencias de otras respuestas que no funcionará a menos que utilicé vistas personalizadas o menos todo lo que se ha cargado, por fin llegaron a una manera de establecer el ancho de la barra de herramientas sobre la base de sus artículos:

//Add bar items to toolbar first. 

UIView* v = toolbar.subviews.lastObject; 
float newWidth = v.frame.origin.x + v.frame.size.width; 

//Set toolbar width 

Deberá sobrescribir UIToolbar -setItems: o detectar botones cambiados para reajustarlos automáticamente.

He incluido esta característica en mi biblioteca de refactorización, es_ios_utils, para establecer el elemento correcto de una entrada de navegación con varios botones. En el enlace anterior, vea UIToolbar +toolbarWithItems: y UINavigationItem -setRightBarButtonItems.

+0

No hay subvistas en 'UIToolbar'. – Dmitry

+0

@Dmitry, 'UIToolbar' hereda de' UIView', que de hecho tiene 'subviews'. –

+0

En SDK 11 puedo ver claramente elementos con 0 subvistas. – Dmitry

0

Swift 3, 4 actualización

tengo una barra de herramientas con barButtonItem inició con la imagen. Todo lo que necesito hacer es calcular el ancho total de las imágenes más los intervalos (margen).

El margen es por defecto de 11 en ancho. El código será:

let width: CGFloat = YourBarButtonItemList.reduce(0) {sofar, new in 
    if let image = new.image { 
     return sofar + image.size.width + 11 
    } else { 
     return sofar + ADefaultValueIfThisDoesntWork + 11 
    } 
} 
Cuestiones relacionadas