Pergunta

Como posso alterar a altura da extensão Today do meu aplicativo na Central de Notificações?

Eu tentei com o construtor de interface e com o código, o interface Builder exibe a exibição com a altura 600, mas não está aplicando essa altura no dispositivo.

Parece que não consigo aumentar mais do que 80 pixels ...

enter image description here

Foi útil?

Solução

No seu widget UIViewController.m (Objetivo-C):

self.preferredContentSize = CGSizeMake(0, 200);

Fará com que seu widget tenha uma altura de 200.

Observe que a largura não afetará a visualização, pois os widgets devem caber na largura exata da central de notificações, que é tratada automaticamente.

Além disso, se quiser animar alterações na altura da sua visualização, você pode implementar (Objective-C):

- (void)viewWillTransitionToSize:(CGSize)size
       withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

no seu controlador de visualização usando -animateAlongsideTransition:completion:

A resposta estava um pouco escondida;você tinha que clicar na barra lateral da documentação para eventualmente encontrar este fantástico documento.


Outra forma é usar restrições de layout automático para restringir a altura da sua visualização.

Outras dicas

Os widgets têm suas alturas ajustadas pelo sistema.Se você definiu sua altura usando restrições, isso será ajustado automaticamente conforme necessário.Se estiver usando layout explícito, você pode solicitar uma nova altura modificando o preferredContentSize do seu widget.

Observe que você não tem garantia de que o centro de notificação respeitará sua solicitação de altura:ele pode ser ajustado automaticamente, pode ser ajustado, mas não na altura exata que você deseja, ou pode não ser respeitado.

A melhor maneira de desenvolver um widget é usar restrições de layout automático para definir seus valores de altura, dessa forma seu widget se adaptará a diferentes alturas com facilidade.

Desde a altura da extensão do iOS 10 é de 110 pixels.Você deve usar o novo método de protocolo widgetActiveDisplayModeDidChange:withMaximumSize: para estender o tamanho da extensão (Objective-C):

- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode
                         withMaximumSize:(CGSize)maxSize {

    if (activeDisplayMode == NCWidgetDisplayModeExpanded) {
        self.preferredContentSize = CGSizeMake(maxSize.width, 600.0);
    } else if (activeDisplayMode == NCWidgetDisplayModeCompact) {
        self.preferredContentSize = maxSize;
    }
}

Além disso, você pode precisar ligar setWidgetLargestAvailableDisplayMode: no seu contexto de extensão na visualização atual do controlador viewDidLoad método como este (Objective-C):

if ([self.extensionContext respondsToSelector:@selector(setWidgetLargestAvailableDisplayMode:)]) { // iOS 10+
    [self.extensionContext setWidgetLargestAvailableDisplayMode:NCWidgetDisplayModeExpanded];
} else {
    self.preferredContentSize = CGSizeMake(0, 600.0); // iOS 10-
}

Este tópico pode ser útil https://forums.developer.apple.com/thread/48930

A melhor maneira é, claro, o Autolayout, mas por padrão existem margens que você pode controlar assim

func widgetMarginInsetsForProposedMarginInsets
    (defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) {
    return UIEdgeInsetsZero
}

Existem duas maneiras de exibir a extensão Hoje:

  1. Modo Compacto (altura fixa para Widget)
  2. Modo de expansão (altura variável para widget)

Qualquer código que você fizer para alterar a altura da extensão no modo Compacto não fará nenhuma diferença.Portanto, você precisa alterar o modo de modo compacto para modo de expansão.

// 1. Load This in viewDidLoad:

override func viewDidLoad() {
  super.viewDidLoad()
  self.extensionContext?.widgetLargestAvailableDisplayMode = NCWidgetDisplayMode.expanded
}

// 2. Implement another widget protocol

func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize){
  if (activeDisplayMode == NCWidgetDisplayMode.compact) {
    self.preferredContentSize = maxSize;
  }
  else {
    self.preferredContentSize = CGSize(width: 0, height: 200);
  }
}

Você pode consultar a WWDC para obter mais atualizações sobre extensões de aplicativos

Hoje widget padrão uiedgeInsets defaultMargininsets (uiedgeInsets) defaultMargininsets = (top = 0, esquerda = 44, inferior = 39, direita = 0)

Você deve adicionar este método

- (UIEdgeInsets)widgetMarginInsetsForProposedMarginInsets:(UIEdgeInsets)defaultMarginInsets {
UIEdgeInsets edgeInsets = UIEdgeInsetsMake(0, 44, 0, 0);
return edgeInsets;}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top