Como faço para criar um UISegmentedControl
como parte de um UINavigationBar
abaixo dele? Ele está conectado ao UINavigationBar
ou é uma visão separada completa adicionada como uma subvisualização ao UINavigationController
controlador de visão do. Parece que faz parte do, UINavigationBar
pois há uma sombra abaixo da barra.
ios
uinavigationbar
uisegmentedcontrol
Yoeriboven
fonte
fonte
Respostas:
É um efeito simples de realizar.
Primeiro, coloque um segmento em uma barra de ferramentas. Coloque esta barra de ferramentas logo abaixo da barra de navegação. Defina o delegado da barra de ferramentas para o seu controlador de vista, e voltar
UIBarPositionTopAttached
nopositionForBar:
. Você pode ver no aplicativo da loja, se você realizar um gesto pop interativo, que a barra de segmento não se move da mesma forma que a barra de navegação. Isso porque eles não são o mesmo bar.Agora, para remover o couro cabeludo. O "hairline" é uma
UIImageView
subvisão da barra de navegação. Você pode localizá-lo e defini-lo como oculto. Isso é o que a Apple faz em seu aplicativo de calendário nativo, por exemplo, bem como no aplicativo da loja. Lembre-se de mostrá-lo quando a visualização atual desaparecer. Se você brincar um pouco com os aplicativos da Apple, verá que o contorno do cabelo está definido como ocultoviewWillAppear:
e como mostrado emviewDidDisappear:
.Para obter o estilo da barra de pesquisa, basta definir a barra
searchBarStyle
comoUISearchBarStyleMinimal
.fonte
initWithRect: CGRectMake(0, self.toplayoutGuide.length, 320, 44)
ou usar o autolayout para posicioná-lo? Qual será o novo topo de childViews, será issoself.toplayoutGuide.length + 44
?Outra abordagem seria procurar o contorno do cabelo e movê-lo para baixo da barra de ferramentas adicionada. Aqui está o que eu inventei.
Também achei o exemplo de código Apple NavBar (Customizing UINavigationBar) muito útil para resolver esse problema.
Certifique-se também de manusear a borda superior da UIToolbar , ela pode aparecer e você pode confundi-la com a linha do cabelo da NavBar. Eu também queria que a UIToolbar fosse exatamente como a NavBar, você provavelmente deseja ajustar as barras de ferramentas
barTintColor
então.fonte
Aqui está uma abordagem do protocolo orientado para este problema específico, com base na resposta aceita:
HideableHairlineViewController.swift
SampleViewController.swift
fonte
shadowImage
propriedade da barra de navegação.Você pode encontrar a barra de navegação com UISegmentedControl no código de amostra da Apple: https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html
Ou você pode criá-lo programaticamente, aqui está o código em minha resposta no outro tópico Adicionar controle segmentado à barra de navegação e manter o título com botões
fonte
Eu queria fazer a mesma coisa .. E consegui isso:
1 - subclasse UINavigationBar
2 - Defina seu NavigationController com subclasse
3 - Adicione seu UISegmentedControl em navigationBar
4 - Corra e Divirta -> não esqueça de colocar a mesma cor em ambos
fonte de pesquisa:
Hackeando UINavigationBar
SO pergunta
fonte
UINavigationButton
é uma API privada e seu aplicativo será rejeitado para usá-la. Você deve tentar mascarar o uso dessa classe.A Apple tem um aplicativo de amostra especificamente para isso. Ele descreve a configuração de uma imagem de sombra transparente e uma imagem de fundo colorida para a barra de navegação e como configurar uma visualização abaixo da barra de navegação. Ele também tem exemplos de outras personalizações da barra de navegação.
Veja https://developer.apple.com/library/ios/samplecode/NavBar/Introduction/Intro.html
fonte
Tentei remover a linha do cabelo usando o método de @Simon, mas não funcionou. Provavelmente estou fazendo algo errado porque sou super novato. No entanto, em vez de remover a linha, você pode simplesmente ocultá-la usando o
hidden
atributo. Aqui está o código:Espero que isso ajude alguém!
fonte
UISegmentedControl abaixo da barra de navegação UIN em 3/4 rápido
Detalhes
Xcode 9.2, swift 4
Amostra Completa
Resultados
fonte
UINavigationController
?Existem muitas maneiras de fazer o que você pediu. O mais fácil, claro, é apenas criá-lo no construtor de interface, mas presumo que não seja isso que você tinha em mente. Criei um exemplo da imagem que você postou acima. Não é exatamente o mesmo, mas você pode brincar com as inúmeras propriedades para obter a aparência do que está procurando.
No ViewController.h
No ViewController.m
fonte
exibeSearchBarInNavigationBar é a maneira de exibir uma barra de pesquisa, bem como sua barra de escopo na barra de navegação.
você precisa apenas ocultar a barra de pesquisa sempre que mostrar um título personalizado
fonte