2008-10-09 770 views
8

Tengo una vista que admite visualización horizontal y vertical, con todos los controles moviéndose cuando se cambia de uno a otro. Actualmente estoy haciendo esto configurando el centro de cada uno de mis controles cuando el usuario gira el teléfono. El problema es que esto es tedioso y requiere mucho código, y parece frustrar el propósito de usar Interface Builder en primer lugar.¿Cuál es la mejor manera de manejar las diferencias paisaje/retrato en IB?

Mi pregunta es: ¿hay alguna manera en Interface Builder para que una vista sea compatible con varios aspectos (uno para el paisaje uno para el retrato)? Si no, ¿cómo hacen otras personas esto con IB? ¿Configura 2 vistas?

Editar: Solo para aclarar mis vista horizontal y vertical se ven diferentes, no quiero una recta transformar, en realidad muestran los datos de manera diferente en el modo horizontal

Respuesta

0

No estoy 100% seguro de si es posible, pero, ¿ha considerado utilizar diferentes controladores de vista para el paisaje y el retrato?

+0

@Colin: ¿Cómo funcionaría? En una rotación, tendría que soltar una y agregar la otra, lo que creo que haría cosas extrañas con la actualización de la pantalla ... también significaría que tendría que configurar alguna clase parental común e intentar hacer que compartan el código ... podría ser muy complicado – rustyshelf

1

Cuando sea necesario, agrego UIView objetos a la vista en IB que hago oculto. Dale un bonito color de fondo para que puedas verlo y envíalo hasta el fondo. Luego use el marco de esa vista cuando necesite establecer el marco de un objeto. Si tiene muchos de ellos, puede considerar usar UILabel en su lugar, para que pueda darle un nombre visible en IB.

Si usted está preocupado por los problemas de memoria, simplemente eliminar todos estos extras UIView s en ViewDidLoad y simplemente guardar sus valores en el marco miembro de CGRect s. Esto solo funciona, por supuesto, si no tiene ninguna de las vistas de cambio de tamaño automático o la posición de rotación, que probablemente no debería de todos modos, en este caso. Hago esto para redimensionar/reposicionar por cualquier razón, no solo cuando la pantalla gira.

0

Los atributos AutoSize de los objetos IBOutlet en el inspector de tamaños de IB (comando 3) ofrecen algunas opciones bastante agradables para el estiramiento automático y el posicionamiento de los elementos. Puede controlar las posiciones de pantalla L/R y T/B y el ancho y alto relativos. No puedes tener el control total del diseño, pero la mayoría de las operaciones básicas están ahí.

0

La única forma en que una vista puede admitir varias orientaciones en IB es establecer la máscara de autosizing de los componentes en la escala y/o el anclaje en los bordes. Para diseñar un diseño totalmente diferente para cada orientación, debe diseñar una vista de retrato y paisaje por separado (cada una en su propio XIB) y alternar entre ellas de forma programática.

Cuestiones relacionadas