Espaço em branco na parte superior do UITextView no iOS 10

116

Eu tenho UITextView com algum texto nele. Tudo estava bem com o iOS 6, mas agora com o iOS 7 ele deixa um espaço em branco no topo e, em seguida, coloca o texto abaixo do meio do textview.insira a descrição da imagem aqui

Eu não configurei nenhum contentOffSet. Por favor ajude!

Ali Sufyan
fonte

Respostas:

217

Uma visualização de texto é uma visualização de rolagem. Os controladores de visualização adicionarão um deslocamento de conteúdo automaticamente para as visualizações de rolagem, pois presume-se que eles desejem rolar para cima atrás da barra de navegação e da barra de status.

Para evitar isso, defina a seguinte propriedade no controlador de visualização que contém a visualização de texto:

self.automaticallyAdjustsScrollViewInsets = NO
Jrturton
fonte
7
Esta é uma resposta melhor porque aborda não apenas como corrigir o problema, mas por que isso acontece em primeiro lugar.
Stephen Melvin,
1
BTW, você não tem que criar subclasses e sobrescrever. Basta definir automaticallyAdjustsScrollViewInsets como NO após instanciar o UITextView.
saiu de
1
@leftspin é um caso bastante raro em que você não criou uma subclasse de um controlador de visualização. E substituir o método significa que seu código ainda funcionará em versões anteriores do iOS - definir a propriedade significa que você precisa primeiro de uma verificação de compatibilidade.
jrturton
1
Então, se meu Model View Controller estiver fora de UINavigationController, o deslocamento será limpo? É meio louco ... Esse comportamento SÓ é correto quando meu textview está alinhado ao topo, caso contrário, é uma porcaria ... Alguém poderia explicar por que a Apple fez algo assim?
Paul Brewczynski de
@jrturton desculpas por este ser um post antigo e por favor me desculpe, pois eu sou novo no objetivo-c, mas isso é atualmente uma propriedade do UIViewController ... costumava ser um método?
Craig
58

A resposta atual que o IronManGill deu não é uma boa solução, porque não é baseada em um entendimento de porque o problema ocorre em primeiro lugar.

A resposta de Jrturton também não é a maneira mais limpa de resolvê-lo. Você não precisa substituir. Mantenha simples!

Tudo que você precisa é definir o seguinte:

self.automaticallyAdjustsScrollViewInsets = NO;

no método viewDidLoad.

Confira os documentos: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin

Dumoko
fonte
1
Fazer alterações no storyboard talvez às vezes seja melhor. Vá para "Inspetor de identidade" -> "Atributos de tempo de execução definidos pelo usuário" e adicione uma definição lá.
hufeng03 de
automaticallyAdjustsScrollViewInsets está obsoleto. No iOS11, usecontentInsetAdjustmentBehavior
Cœur
47

No Interface Builder,

  • Selecione o controlador de visualização que contém o UITextView.
  • Vá para o inspetor de atributos.
  • Desmarque "Ajustar inserções de visualização de rolagem".
user2268026
fonte
Esta é a solução mais fácil para o meu caso em iOS8
platinor
3
Nota: é uma propriedade de UIViewController. Não consegui encontrar e então percebi que não li o texto completamente
Maik639
37

Isso funcionou para mim

textView.textContainerInset = UIEdgeInsetsZero;  
textView.textContainer.lineFragmentPadding = 0;
Ravi Bihani
fonte
24

Vá para Interface Builder:

  1. Selecione view controller aquele que contém o seutext view
  2. desmarque a Adjusts Scroll View Insetspropriedade

insira a descrição da imagem aqui

Aamir
fonte
era isso que eu procurava. você também pode fazer isso adicionando 'self.automaticallyAdjustsScrollViewInsets = false' ao viewController
CodeOverRide
Esta é uma resposta boa e direta, que acabou por terminar minha busca por "por que este texto não está aparecendo".
UpSampler
10

Eu realmente me pergunto se este é um recurso real ... Esta inserção automática de 64 pontos só é adicionada quando o UIScrollViewouUITextView como a maior profundidade de todas as subvisualizações da visão do controlador de visualização. Por exemplo, se você adicionar uma visualização atrás (aqui estou falando de z-buffer, não de imbricação de visualização) da visualização de rolagem, esta inserção de 64 pontos não é adicionada automaticamente.

Por exemplo, este adiciona a inserção:

insira a descrição da imagem aqui

Nesse caso, a inserção não é adicionada:

insira a descrição da imagem aqui

Isso realmente parece estranho para mim ... Por que o SO olharia para a profundidade da visão para decidir se deveria estender a visão?

MonsieurDart
fonte
6

On swift (Xcode 6)

 self.automaticallyAdjustsScrollViewInsets = false
Claudio Barrozo Prado
fonte
Faça isso no viewDidLoadView Controller com a visualização de texto.
Suragch
automaticallyAdjustsScrollViewInsets está obsoleto. No iOS11, usecontentInsetAdjustmentBehavior
Cœur
6

Você pode excluir o espaço em branco em cima do seu UITextViewadicionando:

yourTextView.textContainerInset = UIEdgeInsetsZero;
lberyouk
fonte
5

Resolvi esse problema definindo o deslocamento de conteúdo para um valor negativo. Aqui está o código Swift.

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)
Saqib Omer
fonte
Esta foi a melhor solução mantendo as inserções e rolando sob a barra translúcida corretamente. Eu sugeriria esta modificação. [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason de
1
Nada funcionou para mim, exceto isso. Swift, Xcode 9.1.
Ashok de
1

O que você precisa entender é que isso está relacionado à barra de navegação:

  • Se o seu conteúdo for para a barra de navegação, você deseja que o controlador de visualização ajuste automaticamente as inserções de visualização de rolagem (padrão).
  • Se o seu conteúdo não estiver na barra de navegação (você provavelmente usou o guia de layout superior para a restrição de espaço superior), você pode desativar o ajuste de inserção automática da visualização de rolagem, como mencionado na maioria das outras respostas.
CodeStage
fonte
1

Tentei o seguinte truque, funcionou.

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}
casillas
fonte
1

Solução para Swift 4:

textView.textContainerInset = UIEdgeInsets.zero
Kostas Tsoleridis
fonte
0

Esta é uma solução pouco profissional, tenho certeza ... Mas apenas colocar um rótulo em branco atrás do textview resolve o problema.

Terence
fonte
1
isto não é uma solução =)
Ilker Baltaci
0

Isso funcionou para mim (disponível no iOS 7)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
RyanTCB
fonte