Saturday, 7 April 2018

Edgesforextendedlayout scrollviewsuite


O problema é que meu View, contendo um UIView e um UITableView dentro de um ScrollView. fica escondido sob o UINavigationBar se definido como translúcido. Eu considerei vários tópicos como este. mas todos eles sugerem para definir: No Swift 2, este código foi: Eu atualizei para o 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 diz-me que. Ninguém foi alterado para. none. mas depois da edição, o. none não existe. Alterá-lo para. top não teve nenhum efeito. O tableView é configurado de forma programática e colocar inserções não ajuda, porque eu tenho um scrollView com um UIView no topo do UITableView que está oculto sob o UINavigationBar. O que estou perdendo ajuda é muito apreciada. perguntou 29 de outubro às 3: 45Iniciar no iOS7, os controladores de exibição usam layout de tela inteira por padrão. Ao mesmo tempo, você tem mais controle sobre como ele expõe seus pontos de vista, e isso é feito com essas propriedades: Basicamente, com essa propriedade você define quais lados de sua visão podem ser estendidos para cobrir toda a tela. Imagine que você envie um UIViewController para um UINavigationController. Quando a visualização desse controlador de exibição é exibida, ele será iniciado onde a barra de navegação termina, mas essa propriedade definirá quais lados da exibição (superior, esquerda, inferior, direita) podem ser estendidos para preencher toda a tela. Vamos ver isso com um exemplo: aqui você não está definindo o valor de edgesForExtendedLayout. portanto, o valor padrão é obtido (UIRectEdgeAll), portanto, a exibição estende seu layout para preencher toda a tela. Este é o resultado: como você pode ver, o fundo vermelho se estende por trás da barra de navegação e da barra de status. Agora, você vai definir esse valor para UIRectEdgeNone. então você está dizendo ao view controller para não estender a view para cobrir a tela: Esta propriedade é usada quando sua view é um UIScrollView ou similar, como um UITableView. Você quer que sua tabela comece onde a barra de navegação termina, porque você não verá todo o conteúdo se não, mas ao mesmo tempo você quer que sua tabela cubra toda a tela ao rolar. Nesse caso, configurar edgesForExtendedLayout como None não funcionará porque sua tabela iniciará a rolagem onde a barra de navegação termina e não ficará atrás dela. Aqui é onde esta propriedade vem a calhar, se você deixar o controlador de visualização ajustar automaticamente as inserções (definindo essa propriedade como YES, também o valor padrão), ela será adicionada à parte superior da tabela, portanto a tabela iniciará onde a navegação a barra termina, mas o pergaminho cobrirá a tela inteira. É quando está definido como NO: E YES (por padrão): Em ambos os casos, a tabela rola atrás da barra de navegação, mas no segundo caso (YES), ela será iniciada abaixo da barra de navegação. Este valor é apenas um acréscimo aos anteriores. Se a barra de status for opaca, as exibições não serão estendidas para incluir também a barra de status, a menos que esse parâmetro seja YES. Portanto, se você estender sua visualização para cobrir a barra de navegação (edgesForExtendedLayout para UIRectEdgeAll) e o parâmetro for NO (padrão), ele não cobrirá a barra de status se ela for opaca. Se algo não estiver claro, escreva um comentário e eu responderei. Como o iOS sabe o que o UIScrollView usa o iOS captura a primeira subvisualização na visualização viewcontrollers, portanto, no índice 0, e se for uma subclasse do UIScrollView, aplica as propriedades explicadas a ele. Obviamente, isso significa que o UITableViewController funciona por padrão (já que o UITableView é a primeira visualização). Construindo Visualizações Personalizadas Dinâmicas em 29 de agosto. 2014 11:29 am Comentários Na semana passada eu lancei Fragment para Android. O fragmento é composto de todos os tipos de modos de exibição personalizados, o que eu acho que o diferencia de muitos aplicativos na Play Store. Algumas dessas exibições têm um padrão semelhante às exibições que o Irsquove precisou criar para outros aplicativos, nos quais uma exibição de rolagem tem preenchimento, de modo que cada item dentro dela possa ser rolado para o centro da exibição. 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 rolar uma visão de tal forma que qualquer conteúdo possa ser movido para o centro da tela. Herersquos uma animação demonstrando o que quero dizer. Esse controle, resumido, é apenas um HorizontalScrollView. Observe como, quando o usuário rola até o final, há um bom indicador de excesso de rolagem. Quando o usuário arremessa o controle, ele se move de acordo. O controle desacelera bem como todos os outros Android ScrollViews, fazendo com que pareça natural para o usuário. Essas são todas as coisas que você obtém gratuitamente, criando uma subclasse de uma versão no widget Android. Essa visão, no entanto, apresenta dois desafios. Primeiro, o ScrollView precisa ser observável, para que possamos atualizar nosso valor sempre que o usuário rolar a visualização. Em segundo lugar, precisamos de preenchimento suficiente em cada lado da visualização para que o conteúdo role de forma que as bordas se alinhem com o centro da tela. Letrsquos atacar estes um de cada vez abaixo. Um ScrollView observável O primeiro desafio, criar um ScrollView observável (Horizontal no nosso caso), é na verdade bastante simples. A orientação do ScrollView não é importante, portanto, isso funcionará com visualizações de rolagem verticais ou horizontais. Esse é um problema surpreendentemente simples, e Irsquom sempre se surpreendeu quando Irsquom lembrou que esse recurso não é embutido na classe Android ScrollView padrão. ListView tem uma interface de escuta para ser notificado com as alterações de posição de rolagem, então porque não ScrollView. Letrsquos apenas assume que os desenvolvedores do AOSP acharam que era muito fácil ser necessário. Embora as classes ScrollView embutidas possuam uma interface OnScrollChangedListener, elas possuem um método onScrollChanged protegido, para que possamos facilmente subclassificar o ScrollView de nossa escolha e criar nossa própria interface. Herersquos o meu parece. Como você pode ver, a única coisa que Irsquove adicionou aqui é a interface OnScrollChangedListener e a chamou quando a posição ScrollViewrsquos foi alterada. Esta é uma subclasse super simples que adiciona imenso valor às classes ScrollView embutidas. Herersquos um exemplo de como você pode usar isso. Essa solução simples nos dá exatamente o que queremos, e não faz tanto esforço para implementar. Além do nome da classe, acho que ele se ajusta muito bem às outras classes da API do Android. Onde eu criei essa solução elegante, você pergunta Embora Irsquove tenha apontado várias vezes que essa é uma solução muito simples, a ideia de como abordar o problema veio de uma parte do código-fonte aberto que vi há algum tempo. É por isso que vale a pena estar envolvido em código aberto, mesmo que apenas mergulhe no código dos outros. Preenchimento dinâmico O outro desafio que identificamos ao fazer essa visualização foi que o conteúdo da rolagem precisa estar no centro da tela. O desafio aqui é que nós não sabemos a largura da tela em tempo de compilação, e os canais podem até obter a largura da visão até que ela seja medida, então precisamos de uma maneira dinâmica de adicionar espaçamento ao redor do conteúdo da rolagem. Abaixo, descreverei duas abordagens para esse problema, mas ambas resolvem o problema da mesma maneira. A idéia básica é adicionar espaçadores invisíveis antes e depois do conteúdo da rolagem, dimensionados apropriadamente para que o conteúdo real possa rolar a borda esquerda para o centro da visualização de rolagem. Como você pode ver no diagrama acima, o ScrollView doesnrs precisa fazer algo diferente em relação à rolagem itrsquos, ele apenas parece permitir que os itens rolem para o centro para o usuário. OnPreDrawListener Uma maneira de conseguirmos isso é usando o OnTreObterRbserver Rsquos OnPreDrawListener. Este é um callback super prático que é chamado antes de nossas visualizações serem desenhadas, mas depois de terem sido medidas. Isso nos permite modificar nossas visualizações (adicionar espaçadores), uma vez que sabemos o tamanho da visão. Herersquos um exemplo: Essa é uma boa abordagem porque pode ser adicionada a qualquer ScrollView no código, sem modificar seus layouts existentes (supondo que o filho do ScrollView seja um LinearLayout apropriadamente orientado). Jogue isso em um auxiliar de visualização e ele pode ser tão simples quanto ViewHelper. addScrollingSpacers (scrollView). Uma desvantagem dessa abordagem é que na verdade descartamos um ciclo de desenho de layout de medida. Lembre-se que o nosso OnPreDrawListener é chamado no final deste ciclo, para que possamos conhecer a largura do nosso ScrollView. Isso significa que, na primeira vez, esse é realmente um ciclo medir-layout-adicionar-espaçadores-medir-desenhar-layout. No final do dia, uma vez que isso só acontece uma vez, itrsquos geralmente não é um grande negócio, mas é algo para se notar. Mas e se houvesse uma maneira de adicionar nossos espaçadores mais cedo no ciclo measure-layout-draw no Layout Como isso aconteceria, existe. Como queremos modificar o layout dos itens, com uma visualização composta personalizada, podemos fazer nossos ajustes durante o ciclo do layout, ou seja, sem perda de tempo. Herersquos como podemos conseguir isso. Neste exemplo, você pode ver que nossa visualização composta personalizada é realmente o contêiner de um ObservableHorizontalScrollView e que define a largura do espaçador sempre que o layout for alterado, durante a passagem inicial do layout. Essa abordagem também torna nossa visão facilmente reutilizável por meio de nossos layouts XML, assim: O Fim Agora você tem algumas maneiras diferentes de criar uma visualização personalizada que irá encantar seus usuários. Qual deles você escolhe depende inteiramente de você, mas ambos podem ser estendidos para trabalhar 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 o seu toolbelt. Se você fizer algo semelhante a isso, ou tiver outra abordagem, compartilhe-a nos comentários. Postado por Ryan Harter 29 de agosto. 2014 11:29 am Comentários Posts Recentes Google

No comments:

Post a Comment