É possível alterar a altura do UIPickerView? Alguns aplicativos parecem ter PickerViews mais curtos, mas a configuração de um quadro menor não parece funcionar e o quadro está bloqueado no Interface Builder.
ios
iphone
cocoa-touch
uikit
uipickerview
Steven Canfield
fonte
fonte
Respostas:
Parece óbvio que a Apple não convida particularmente a limpeza com a altura padrão do
UIPickerView
, mas descobri que você pode conseguir uma mudança na altura da visualização assumindo o controle total e passando um tamanho de quadro desejado no momento da criação, por exemplo:smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Você descobrirá que, em várias alturas e larguras, existem falhas visuais. Obviamente, essas falhas precisariam ser contornadas de alguma forma ou escolher outro tamanho que não as exibisse.
fonte
Nenhuma das abordagens acima funciona no iOS 4.0
A altura do pickerView não é mais redimensionável. Há uma mensagem que é descarregada para o console se você tentar alterar o quadro de um seletor no 4.0:
Acabei fazendo algo bastante radical para obter o efeito de um seletor menor que funciona tanto no OS 3.xx quanto no OS 4.0. Deixei o seletor com o tamanho que o SDK decidir que deveria ter e, em vez disso, criei uma janela transparente cortada em minha imagem de plano de fundo por meio da qual o seletor se torna visível. Em seguida, basta colocar o seletor atrás (na ordem Z) de meu plano de fundo UIImageView para que apenas uma parte do seletor seja visível, o que é ditado pela janela transparente em meu plano de fundo.
fonte
Existem apenas três alturas válidas para
UIPickerView (162.0, 180.0 and 216.0)
.Você pode usar as funções
CGAffineTransformMakeTranslation
eCGAffineTransformMakeScale
para ajustar o seletor de acordo com sua conveniência.Exemplo:
O código acima altera a altura da visualização do seletor para a metade e a reposiciona na posição exata (Left-x1, Top-y1) .
fonte
Experimentar:
fonte
No iOS 4.2 e 4.3 funciona o seguinte:
O seguinte não funciona:
Eu tenho um aplicativo que está na app store com um selecionador de data de 3 linhas. Achei que a alteração da altura pode ter sido evitada porque você vê o texto sob a borda do selecionador de data, mas isso também acontece com o selecionador de data de altura 216 normal.
Qual é o bug? Seu palpite é tão bom quanto o meu.
Além disso, existem 3 alturas válidas para
UIDatePicker
(eUIPickerView
) 162,0, 180,0 e 216,0. Se você definir umaUIPickerView
altura para qualquer outra coisa, verá o seguinte no console ao depurar em um dispositivo iOS.fonte
No iOS 9, você pode alterar livremente
UIPickerView
a largura e a altura. Não há necessidade de usar os hacks de transformação mencionados acima.fonte
Descobri que você pode editar o tamanho do UIPickerView - mas não com o construtor de interface. abra o arquivo .xib com um editor de texto e defina o tamanho da visualização do selecionador para o que quiser. O construtor de interface não redefine o tamanho e parece funcionar. Tenho certeza que a apple travou o tamanho por uma razão, então você terá que experimentar diferentes tamanhos para ver o que funciona.
fonte
Vantagens:
UIPickerView
se comporte como deveriaUIViewController
viewWillLayoutSubviews
internamente para redimensionar / posicionar oUIPickerView
UIPopover
Desvantagens:
UIPickerView
pickerView viewForRow
para desfazer a transformação para as subViewsSolução:
Subclasse UIPickerView e substitua os dois métodos usando o código a seguir. Ele combina subclasses, altura fixa e abordagem de transformação.
fonte
Uma maneira fácil de alterar a altura visível de uma visualização do seletor é incorporar o seletor em um UIView, ajustar a altura da visualização pai para a altura que você deseja ver do seletor e, em seguida, habilitar "Clip Subviews" no Interface Builder no UIView principal ou definido
view.clipsToBounds = true
em código.fonte
Clip Subviews
. também o tamanho doUIPickerView
deve ser mais alto - e você deve apontar o centro do seuUIPickerView
para ser visível dentro do paiUIView
UIPickerView
partir do código).Não fui capaz de seguir nenhum dos conselhos acima.
Assisti a vários tutoriais e achei este o mais benéfico:
Eu adicionei o código a seguir para definir a nova altura dentro do método "viewDidLoad", que funcionou em meu aplicativo.
Espero que tenha sido útil!
fonte
Isso mudou muito no iOS 9 (no iOS 8 é muito semelhante ao que estamos vendo aqui). Se você puder ter como alvo apenas o iOS 9, poderá redimensionar o
UIPickerView
conforme achar necessário, definindo seu quadro. Boa!Aqui está das notas de lançamento do iOS 9
fonte
Estou trabalhando com ios 7, Xcode 5. Consegui ajustar a altura do seletor de data indiretamente, incluindo-o em uma visualização. A altura das visualizações do contêiner pode ser ajustada.
fonte
Crie uma visualização em IB ou código. Adicione seu seletor como uma subvisão desta visualização. Redimensione a visualização. Isso é mais fácil de fazer no IB. Crie restrições da visualização para sua supervisão e do selecionador para esta nova visualização.
Como o Seletor se curva ao redor, ele se espalha pela parte superior e inferior da visualização. Você pode ver em IB quando você adiciona restrições superior e inferior do seletor à visualização, ele mostra um espaço padrão algo como 16 pontos acima e abaixo do contêiner de visualização. Defina a visualização para recortá-lo se você não quiser esse comportamento (aviso feio).
Aqui está o que parece com 96 pontos de altura em um iPhone 5. O seletor com o spillover tem cerca de 130 pontos de altura. Muito magro!
Estou usando isso em meu projeto para evitar que o seletor se espalhe a uma altura desnecessária. Essa técnica reduz e força um derramamento mais rígido. Na verdade, parece mais elegante ser um pouco mais compacto.
Aqui está uma imagem da vista mostrando o spillover.
Aqui estão as restrições IB que adicionei.
fonte
Mesmo que não esteja redimensionando, outro truque pode ajudar na situação em que o UIPicker está localizado na parte inferior da tela.
Pode-se tentar movê-lo ligeiramente para baixo, mas a fileira central deve permanecer visível. Isso ajudará a revelar algum espaço acima do seletor, pois as linhas inferiores ficarão fora da tela.
Repito que esta não é a maneira de alterar a altura da visualização do UIPicker, mas uma ideia do que você pode fazer se todas as outras tentativas falharem.
fonte
Ok, depois de lutar por um longo tempo com a estúpida visualização de seleção no iOS 4, decidi mudar meu controle para uma tabela simples: aqui está o código:
Aqui está o arquivo .h para isso:
é isso, agora a única coisa que resta é criar uma variável de membro na visão combobox que manterá a seleção de linha atual, e estamos prontos.
Aproveite todos.
fonte
Geralmente você não pode fazer isso no xib ou definir o quadro programaticamente, mas se você abrir seu xib pai como fonte e alterar a altura a partir daí, então ele funciona. nessa tag, mude a altura lá e salve o arquivo.
fonte
Pelo que eu sei, é impossível reduzir o UIPickerView. Eu também não vi um menor usado em qualquer lugar. Meu palpite é que foi uma implementação customizada, se eles conseguiram reduzi-la.
fonte
Se você deseja criar seu seletor em IB, pode redimensioná-lo posteriormente para um tamanho menor. Verifique se ele ainda desenha corretamente, pois chega um ponto em que parece hediondo.
fonte
Swift : você precisa adicionar uma subvisualização com clipe aos limites
Isso deve adicionar um seletor de data de altura 100 cortado na parte superior do controlador de visualização.
fonte
Meu truque: usar a camada de máscara do datepicker para tornar o datePicker alguma parte visível. como você vê, assim como mudar a moldura do datepicke.
fonte
Eu uso uma camada de máscara para alterar o tamanho da tela
fonte
Incorporar em uma exibição de pilha. O modo de exibição de pilha é um componente adicionado recentemente pela Apple em seu iOS SDK para refletir implementações baseadas em grade em bibliotecas de front-end baseadas em java script, como bootstrap.
fonte
Conforme mencionado acima,
UIPickerView
agora é redimensionável. Só quero acrescentar que, se você quiser alterar a altura do pickerView em uma célula tableView, não tive nenhum sucesso em definir a âncora de altura como uma constante. No entanto, o usolessThanOrEqualToConstant
parece funcionar.fonte
Depois de um longo dia coçando minha cabeça, descobri algo que funciona para mim. Os códigos abaixo recriarão o UIDatePicker toda vez que o usuário alterar a orientação do telefone. Isso removerá quaisquer falhas que o UIDatePicker tenha após uma mudança de orientação.
Como estamos recriando o UIDatePicker, precisamos de uma variável de instância que manterá o valor de data selecionado. Os códigos abaixo são testados no iOS 4.0.
fonte
Se você deseja definir o tamanho de UiPickerView. O código acima certamente vai funcionar para você.
fonte
No iOS 5.0, fiz o seguinte funcionar:
Isso criou um selecionador de data como o que a Apple usa no aplicativo Agenda ao criar um novo evento no modo paisagem. (3 linhas de altura em vez de 5.) Isso não funcionou quando defini o quadro dentro do
initWithFrame:
método, mas até agora funcionou ao defini-lo usando um método separado.fonte
para iOS 5:
se você der uma olhada rápida em UIPickerView Protocol Reference
você encontrará
Eu acho que é o primeiro que você está procurando
fonte
pickerView:rowHeightForComponent:
é o método delegado para decidir a altura de cada linha - não a altura da visualização do selecionador.