UIView Autororesize Resources
-
22-09-2019 - |
Pergunta
Eu tenho trabalhado para automaticamente uma UIView personalizada e a Apple tem muito pouco a dizer sobre isso. Além disso, com base no feedback SO, a documentação da Apple está realmente errada em algumas áreas. Finalmente, embora haja seis componentes de redimensionamento no Builder de Interface e seis para setAutoresizingMask:
Eles não parecem se correlacionar. Por exemplo, definir a mola de largura em IB tem um efeito diferente de definir o autoresizingMask
para UIViewAutoresizingFlexibleWidth
Ao girar o dispositivo.
Existem bons recursos para aprender sobre como o redimensionamento funciona no iPhone?
Editar:
Entendo os conceitos básicos que a Apple usa, como o ContentMode, e li a documentação do UIView. Estou procurando algo que explique um pouco mais profundamente o que as configurações do IB fazem em termos do que está disponível no SDK programaticamente.
Solução
definindo o autoresizingMask
para UIViewAutoresizingFlexibleWidth
, é equivalente a definir a mola de largura, além dos suportes esquerda e direita no construtor de interface (os struts significam que a borda está não flexível). Se você quisesse replicar o comportamento de definir apenas a mola de largura, mas não os suportes esquerdo e direito, você teria que definir autoresizingMask
para UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin
Outras dicas
Achei este post útil para entender o iOS automouseizando.
http://www.techotopia.com/index.php/ios_4_iphone_rotation,_view_resizando_and_layout_handling
Da Apple:
... Especifique o valor dessa máscara combinando as constantes descritas em Uiviewautoresizando usando o C Bitwise ou Operator. A combinação dessas constantes permite especificar quais dimensões da visão devem crescer ou encolher em relação à supervisão. O valor padrão dessa propriedade é o UiviewautoresingNone, o que indica que a visualização não deve ser redimensionada.
... Por exemplo, suponha que essa propriedade inclua as constantes UiviewautoresingFlexibleWidth e UiviewautoresingingFlexiblerIrightmargin, mas não inclui a constante uiviewautoresingflexibleleftmargin, indicando assim que o Largura da margem esquerda da vista é fixa mas que a largura da visão e a margem direita podem mudar. Assim, a vista aparece ancorada ao lado esquerdo de sua supervisão, enquanto a largura da visualização e a lacuna à direita do aumento da vista.
Se os comportamentos automobilizadores não oferecerem o layout preciso necessário para suas visualizações, você poderá usar uma exibição de contêiner personalizada e substituir o método LayoutSubViews para posicionar suas subviews com mais precisão.
Portanto, se você deseja posicionar uma visualização ancorada no lado superior e direito de sua supervisão, pode aplicar uma máscara como:
[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];
supervisão tem parâmetros como ContentMode e AUTORESIZESSUBVIELS, que tudo com MASSA DE AUTORESIZING de suas subvisões fazem o comportamento de redimensionamento
Leia atentamente http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html
Para o registro, eu arranhei minha cabeça por uma hora porque meu Uilabel de uma linha simplesmente não agredia o tamanho da fonte automaticamente para se encaixar na largura. Finalmente, isso fez o truque:
label.contentMode = UIViewContentModeScaleAspectFit;
Eu pesquisei no Google e ninguém parece esclarecer esse detalhe (todo mundo informa que a etiqueta deve ser 1 linha, o conjunto AjustsFontsizeTofitWidth/MinimumFontSize etc.). Talvez o valor padrão desta propriedade tenha alterado? Estou no iOS 4.3.