Tengo un UIAlertController con un archivo de Texto.
El problema es que por defecto el UIAlertController es de un tamaño muy pequeño. Es el texto que no puede ser visto correctamente.

Así, quiero aumentar la altura y la anchura de la UIAlertController. En otras palabras, quiero crear una personalizada UIAlertController. ¿Cuál sería la manera de hacerlo?

OriginalEl autor Sumit Garg | 2014-11-06

4 Comentarios

  1. 2

    No creo que usted puede ajustar el tamaño. Mala solución es, para establecer \n en el mensaje. UIAlertView también tiene la misma limitación.

    Voy a sugerir el uso de UIPopoverController y la implementación de sus propios dismiss botón, ya que UIAlertController propósito es más para mostrar mensajes de alerta al usuario (mensaje corto) por la Documentación de Apple. No creo que la pared de mensaje puede ser considerado como mensaje de alerta.

    En general, creo que esta limitación se establece por Apple como un recordatorio de este punto de vista es mostrar un mensaje corto a los usuarios como parte de su experiencia de usuario.

    Editado con el código de ejemplo
    En primer lugar, lo siento, me refiero a UIPopoverPresentViewController, no UIPopoverController

    Aquí es la clase de ejemplo:

    @interface DemoPopOverPresentViewController : UIViewController
    - (instancetype)initWithTitle:(NSString*)title message:(NSString*)message buttonTitle:(NSString*)buttonTitle;
    @property NSString* titleText;
    @property NSString* messageText;
    @property NSString* buttonTitleText;
    @property UILabel* titleLabel;
    @property UILabel* textLabel;
    @property UIButton* submitButton;
    @end
    @implementation DemoPopOverPresentViewController
    - (instancetype)initWithTitle:(NSString*)title message:(NSString*)message buttonTitle:(NSString*)buttonTitle;
    {
    self = [super init];
    if ( self ) {
    _titleText = title;
    _messageText = message;
    _buttonTitleText = buttonTitle;
    }
    return self;
    }
    - (void)viewDidLoad;
    {
    [super viewDidLoad];
    _titleLabel = [UILabel new];
    [_titleLabel setTextAlignment:NSTextAlignmentCenter];
    [_titleLabel setFont:[UIFont preferredFontForTextStyle:UIFontTextStyleHeadline]];
    [_titleLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
    [_titleLabel setText:_titleText];
    [self.view addSubview:_titleLabel];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_titleLabel]|"     options:0 metrics:nil views:NSDictionaryOfVariableBindings(_titleLabel)]];
    _textLabel = [UILabel new];
    [_textLabel setTextAlignment:NSTextAlignmentCenter];
    [_textLabel setFont:[UIFont preferredFontForTextStyle:UIFontTextStyleBody]];
    [_textLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
    [_textLabel setNumberOfLines:0];
    [_textLabel setText:_messageText];
    [self.view addSubview:_textLabel];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_textLabel]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_textLabel)]];
    _submitButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [_submitButton setTitle:_buttonTitleText forState:UIControlStateNormal];
    [_submitButton addTarget:self action:@selector(submitButtonTouched:) forControlEvents:UIControlEventTouchUpInside];
    [_submitButton setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.view addSubview:_submitButton];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_submitButton]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_submitButton)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_titleLabel(<=44.0)]-16-[_textLabel]-16-[_submitButton(<=44.0)]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_titleLabel,_textLabel,_submitButton)]];
    }
    - (void)submitButtonTouched:(id)sender;
    {
    [self dismissViewControllerAnimated:YES completion:^{
    }];
    }
    @end

    A continuación, en presentingViewController,

    • en primer lugar, es necesario implementar UIPopoverPresentationControllerDelegate delegado
    • a continuación, iniciar la clase:

      DemoPopOverPresentViewController* controller = [[DemoPopOverPresentViewController alloc] initWithTitle:@"Info" message:@"The quick brown fox jumps over the lazy dog" buttonTitle:@"Dismiss"];
      controller.modalPresentationStyle = UIModalPresentationPopover;
      //set the content size of your 'alert view'
      controller.preferredContentSize = CGSizeMake(200.0, 150.0);
      UIPopoverPresentationController* pc = [controller popoverPresentationController];
      pc.sourceView = self.view;
      pc.delegate = self;
      pc.sourceRect = CGRectMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0, 0.0, 0.0);
      pc.permittedArrowDirections = NULL;
      [self presentViewController:controller animated:YES completion:^{
      }];
    • implementar el método de delegado para UIPopoverPresentationControllerDelegate: - (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller y volver UIModalPresentationNone

    Sí, sé que este es un buen enfoque para mostrar un UIPopoverController por un largo mensaje, pero el cliente quiere UIAlertController.
    A continuación, puede utilizar UIPopOverController para imitar la interfaz de usuario de la ventana de alerta.
    me puedes dar un ejemplo de código para ella o algun tutorial que me ayude?
    El problema con la ventana emergente de lo que puedo decir es que tiene a punto de donde vino, a diferencia de una alerta que sólo aparece en la pantalla.

    OriginalEl autor Peter

  2. 7

    Sé que esto está cerrado, pero he encontrado que usted puede agregar restricciones a la alertviewcotnroller.vista de esta forma

    var height:NSLayoutConstraint = NSLayoutConstraint(item: alertController.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: self.view.frame.height * 0.80)
    alertController.view.addConstraint(height);
    Esto parece funcionar para la altura, pero no ancho
    Yo también sólo han sido capaces de conseguir que esto funcione para la altura.
    Solo funciona para el iPhone. iPad barfs «no se puede satisfacer simultáneamente las restricciones.» Como tal, si Apple añade restricciones para iPhone, entonces se producirá el mismo problema.
    Ellis, de la misma manera que usted puede agregar restricción de ancho de la siguiente manera : ** var ancho:NSLayoutConstraint = NSLayoutConstraint(elemento: alertController.ver, atributo: NSLayoutAttribute.Ancho, relatedBy: NSLayoutRelation.Igual, toItem: nil, atributo: NSLayoutAttribute.NotAnAttribute, multiplicador: 1, constante: auto.vista.marco.ancho * 0.80) alertController.vista.addConstraint(ancho); ** En mi proyecto he usado este para control de ancho y funcionó..
    no funciona para el ancho.

    OriginalEl autor Barrett

  3. 1
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    }]];
    UIViewController *viewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
    if ( viewController.presentedViewController && !viewController.presentedViewController.isBeingDismissed ) {
    viewController = viewController.presentedViewController;
    }
    **NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:alert.view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationLessThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:viewController.view.frame.size.height*0.8f];
    [alert.view addConstraint:constraint];**
    [viewController presentViewController:alert animated:YES completion:^{
    }];
    cómo ajustar el ancho de alertviewcontroller

    OriginalEl autor ProgDesigner

  4. 1

    Este sin duda debe ayudar a usted. (Swift 4.2)

    let alert = UIAlertController(title: "Alert", message: "Some message", preferredStyle: .actionSheet)
    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { (action) in
    }))
    alert.addAction(UIAlertAction(title: "Some", style: .default))
    alert.addAction(UIAlertAction(title: "Some", style: .default))
    let height:NSLayoutConstraint = NSLayoutConstraint(item: alert.view, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: view.frame.height)
    alert.view.addConstraint(height);
    present(alert, animated: true)

    OriginalEl autor Bhanu Birani

Dejar respuesta

Please enter your comment!
Please enter your name here