Sunday 21 July 2019

Edgesforextendedlayout scrollviewsuite


O problema é que minha Vista, contendo um UIView e um UITableView dentro de um ScrollView. Fica escondido sob o UINavigationBar se configurado translúcido. Considero vários tópicos como esse. Mas todos sugerem para definir: no Swift 2, este código foi: atualizei para Xcode 8.1 e Swift 3.0.1 hoje, mas não consigo encontrar nada nas notas de lançamento sobre este assunto. O compilador me diz, isso. Ninguém mudou para. não. Mas depois de editar, que. none não existe. Alterar para. top não teve nenhum efeito. O tableView é configurado programaticamente e colocar insets não ajuda porque eu tenho um scrollView com UIView em cima do UITableView que está escondido sob o UINavigationBar. O que estou faltando A ajuda é muito apreciada. Perguntou Oct 29 16 às 3: 45Building Dynamic Custom Views 29 de agosto. 2017 11:29 am Comentários Na semana passada eu lancei Fragment para Android. O Fragmento é composto de todo tipo de visualizações personalizadas, que eu acho que o distingue de muitos aplicativos na Play Store. Algumas dessas visualizações têm um padrão semelhante às exibições que o Irsquove teve que criar para outros aplicativos, nos quais uma exibição de rolagem tem preenchimento, de modo que cada item dentro dele possa ser rolado para o centro da vista. Na superfície itrsquos, isso não parece complexo, mas quando você considera a enorme diferença nos tamanhos de tela disponíveis no Android, as coisas ficam um pouco mais complicadas. O controle Letrsquos começa definindo nosso objetivo final. O controle que queremos construir permite ao usuário percorrer uma exibição de modo que qualquer um dos conteúdos possa ser movido para o centro da tela. Herersquos uma animação que demonstra o que quero dizer. Esse controle, reduzido, é realmente apenas um HorizontalScrollView. Observe como, quando o usuário percorre o fim, há um bom indicador de overscroll. Quando o usuário lança o controle, ele se move de acordo. O controle desacelera bem como todos os outros ScrollViews do Android, tornando-se natural para o usuário. Estas são todas as coisas que você obtém gratuitamente, subclassando uma compilação no widget do Android. Esta visão, no entanto, coloca dois desafios. Primeiro, o ScrollView precisa ser observável, para que possamos atualizar nosso valor sempre que o usuário percorra a exibição. Em segundo lugar, precisamos de preenchimento suficiente em cada lado da vista para que o conteúdo se deslize de tal forma que as bordas se alinhem com o centro da tela. Letrsquos aborda estes um por um tempo abaixo. Um ScrollView Observável O primeiro desafio, criando um ScrollView observável (Horizontal no nosso caso), é bastante simples. A orientação do ScrollView isnrsquot é importante, então isso funcionará com visualizações de rolagem verticais ou horizontais. Este é um problema surpreendentemente simples, e a Irsquom sempre se surpreende quando a Irsquom lembrou que esse recurso não está integrado na classe padrão do Android ScrollView. ListView tem uma interface ouvinte para ser notificada com as mudanças de posição de rolagem, então por que não ScrollView. Letrsquos apenas assumiu que os desenvolvedores da AOSP descobriram que era muito fácil de ser necessário. Enquanto as classes ScrollView incorporadas donrsquot possuem uma interface OnScrollChangedListener, eles possuem um método onScrollChanged protegido, então podemos facilmente subclasse o ScrollView de nossa escolha e criamos nossa própria interface. Herersquos como é o meu. Como você pode ver, a única coisa que o Irsquove adicionou aqui é a interface OnScrollChangedListener e chamou isso quando a posição ScrollViewrsquos muda. Esta é uma subclasse super simples que adiciona imenso valor às classes incorporadas no ScrollView. Herersquos um exemplo de como você pode usar isso. Esta solução simples nos dá exatamente o que queremos, e não exige muito esforço para implementar. Além do nome da classe, acho que até mesmo se encaixa muito bem com as outras classes de API do Android. Onde eu encontrei essa solução elegante, você perguntou enquanto Irsquove apontou várias vezes que esta é uma solução muito simples, a idéia de como abordar o problema realmente veio de um código aberto que vi há pouco. É por isso que vale a pena estar envolvido em código aberto, mesmo que os itrsquos simplesmente mergulhem através do código de outros. Recheio dinâmico O outro desafio que identificamos ao fazer essa visão era que o conteúdo de rolagem precisa estar no centro da tela. O desafio aqui é que nós não conhecemos a largura da tela no tempo de compilação, e o canrsquot ainda ganha a largura da vista até que seja medido, então precisamos de uma maneira dinâmica de adicionar espaçamento em torno do conteúdo de rolagem. Abaixo vou descrever duas abordagens para este problema, mas ambos resolvem o problema da mesma forma. A idéia básica é adicionar espaçadores invisíveis antes e depois do conteúdo de rolagem, dimensionados adequadamente para que esses conteúdos reais possam rolar sua margem esquerda para o centro da exibição de rolagem. Como você pode ver no diagrama acima, o ScrollView doesnrsquot precisa fazer algo diferente em relação à rolagem do itrsquos, ele apenas parece permitir que os itens se deslocem para o centro para o usuário. OnPreDrawListener Uma maneira de conseguir isso é usando o ViewTreeObserver rsquos OnPreDrawListener. Esta é uma chamada de retorno super útil que é chamada antes que nossos pontos de vista sejam desenhados, mas depois de terem sido medidos. Isso nos permite modificar nossas visualizações (adicionar espaçadores) uma vez que conhecemos o tamanho da vista. Herersquos um exemplo: esta é uma boa abordagem porque pode ser adicionada a qualquer ScrollView no código, sem modificar os layouts existentes (assumindo que o filho do ScrollView é LinearLayout adequadamente orientado). Jogue isso em um auxiliar de visualização e pode ser tão simples quanto o ViewHelper. addScrollingSpacers (scrollView). Uma desvantagem dessa abordagem é que, na verdade, descartamos um ciclo de desenho de medida. Lembre-se de que nosso OnPreDrawListener é chamado no final deste ciclo para que possamos conhecer a largura do nosso ScrollView. Isso significa que, pela primeira vez, isso é realmente um ciclo de medida-layout-add-spacers-measure-layout-draw. No final do dia, uma vez que isso só acontece uma vez, não é geralmente um grande negócio, mas é algo a ser observado. Mas e se houvesse uma maneira de adicionar nossos espaçadores mais cedo no ciclo de medida-layout-desenho. Como aconteceria, existe. Uma vez que queremos modificar o layout dos itens, com uma visão composta personalizada, podemos fazer nossos ajustes durante o ciclo de layout, o que significa que não há tempo desperdiçado. Herersquos, como podemos realizar isso. Neste exemplo, você pode ver que nossa visão composta personalizada é realmente o recipiente de um ObservableHorizontalScrollView e que ele define a largura do espaçador sempre que o layout muda, durante a passagem do layout inicial. Esta abordagem também torna nossa visão facilmente reutilizável através de nossos layouts XML, assim: você agora possui algumas maneiras diferentes de criar uma visão personalizada que irá encantar seus usuários. O que você escolhe é inteiramente para você, mas ambos podem ser estendidos para funcionar com ListViews, ou realmente qualquer visualização de rolagem para a qual você gostaria de algum espaço extra. Essas técnicas também podem ser usadas para outros efeitos. Por exemplo, além de usar isso para seletores de valores personalizados, o Irsquove usou a mesma abordagem para coisas como efeitos de paralaxe. Therersquos apenas mais um par de ferramentas para seu toolbelt. Se o seu tiver feito algo semelhante a este, ou tenha outra abordagem, compartilhe-o nos comentários. Postado por Ryan Harter 29 de agosto. 2017 11:29 am Mensagens recentes Google

No comments:

Post a Comment