ios: el menú emergente en formato horizontal ocupa toda la pantalla


Estoy usando el siguiente código para crear un popover.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"popover"]) {
        self.popoverTvc = [segue destinationViewController];
        self.popoverTvc.popoverPresentationController.delegate = self;
    }
}

Cuando el usuario hace clic en un botón en la barra de navegación, se activará el estilo de popover anterior y el controlador de vista resultante tendrá una vista de tabla.

El problema es que,

En modo vertical, el tamaño de la vista de la tabla depende del tamaño del contenido disponible. Pero cuando cambio la vista de paisaje a retrato, la vista de tabla contiene celdas vacías que son visibles y, por lo tanto, estas ce vacíaslls están bloqueando la interfaz de usuario. ¿Por qué es así? Quiero que la vista de tabla no bloquee toda la pantalla, incluso en modo horizontal.

Estoy usando el siguiente código en la vista del método de carga para cambiar el tamaño de la vista de tabla

if (self.tableView && self.presentingViewController) {
    self.preferredContentSize = [self.tableView sizeThatFits:self.presentingViewController.view.bounds.size];
}


------------Respuesta------------

Ha pasado un tiempo, pero tuve el mismo problema y lo solucioné agregando ambos

public func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
    return .none
}

y

public func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
    return .none
}

en el controlador de vista principal/de presentación.



------------Respuesta------------

En lugar del tamaño de la tablala vista es según el tamaño de los contenidos disponibles. dar el tamaño de la ventana emergente mediante programación.

Haz Me gusta seguir:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSString *identifier = segue.identifier;
    if ([identifier isEqualToString:@"popover"]) {

        UIViewController *dvc = segue.destinationViewController;
        dvc.preferredContentSize = CGSizeMake(180,128);


        UIPopoverPresentationController *ppc = dvc.popoverPresentationController;
        if (ppc) {
            ppc.delegate = self;
        }
    }

Y agregue esto debajo del paso anterior:

   - (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {

    return UIModalPresentationNone;
}

Etiquetas: objective-c ios

Artículos relacionados:

javascript - ¿Cómo evitar la colisión de alcance entre las directivas angularjs?

ios: recuperación de la matriz bool de NSUserdefaults en Swift