Estoy desarrollando una aplicación para iOS y estoy usando el Guión gráfico con el diseño Automático EN. Uno de mi punto de vista controladores tiene un conjunto de 4 botones, y en ciertas circunstancias, me gustaría hacer el primero desaparezca.

Si puedo usar el setHidden:TRUE método de la UIButton de ser invisible pero obviamente todavía tomar el espacio en la vista, y el resultado es un «agujero» que no he sido capaz de llenar hacer el resto de UIButton a flotar hacia la parte superior de la vista principal.

En Android me habría simplemente utiliza View.GONE en lugar de View.INVISIBLE, pero en iOS estoy atascado con este comportamiento y no quiero creer que la única solución es manualmente (sí, me refiero a programación) mover el resto de los elementos en la parte superior.

Pensé que habría sido capaz de hacerlo establecer algún tipo de Restricción para hacer todo tan automático como en Android, pero no he tenido suerte.

Antes de dar Autodiseño, ¿alguien que me señale en la dirección correcta?

Estoy usando el IB, pero me siento cómodo con programática cosas así.

ACTUALIZACIÓN:

Ajuste de la componente de altura a 0 y no ayudar.

He intentado algo como esto:

UIButton *b;
CGRect frameRect = b.frame;
frameRect.size.height = 0;
b.frame = frameRect;
  • Cómo acerca de la configuración de la altura del botón de cero?
  • He intentado algo como esto: UIButton * b; CGRect frameRect = b.marco; frameRect.tamaño.altura = 0; b.frame = frameRect; No ha habido suerte 🙁
  • Sé que esto es una super vieja pregunta pero con respecto a su configuración de la actualización del marco a 0 no ayudarán si usted está utilizando el diseño automático. Usted tiene que fijar la altura de la restricción a 0
InformationsquelleAutor elbuild | 2013-07-25

13 Comentarios

  1. 37

    La adición de una restricción(NSLayoutAttributeHeight) que establece la altura de la vista a 0 trabajó para mí:

    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.captchaView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:0]];
    • Funciona como un encanto
    • Swift versión: self.view.addConstraint(NSLayoutConstraint(item: self.captchaView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: 0))
    • Esta debería haber sido la respuesta
    • ¿Qué pasa si no sé altura real de la vista deseada (por ex. contenedor de vista renderizada poco más tarde)?
    • Muchas gracias por la impresionante respuesta! Para alguien que la necesite. Tengo un error Unable to simultaneously satisfy constraints. mientras yo ya tenía restricciones para la vista. Yo resolverlo por stackoverflow.com/a/38625419/1270901
    • he utilizado el mismo código pero no funciona …stackoverflow.com/questions/45454992/…
    • he utilizado el mismo código pero no funciona …stackoverflow.com/questions/45454992/…
    • Impresionante respuesta.Me salvó el día
    • pero usted puede tener algo de relleno, el espacio para este punto de vista
    • p.s. constante la altura de la mierda, yo uso la misma altura y multiplicador, por ejemplo, para tener el 25% de los padres de la vista, algún ejemplo de esto?
    • y usted acaba de añadir varias restricciones..
    • Generalmente yo uso la UIStackView, pero esto funciona mejor para los casos en los que usted tiene que empujar sus puntos de vista a un lado del contenedor de vista en lugar de la distribución de sus espacios. Gran respuesta alternativa.
    • el uso de su comando y «a la vista.hidden = true». funcionan perfectamente

  2. 17

    Todas las respuestas a esta pregunta son ineficientes.
    La mejor manera de equvailent de Android setVisibility:Ido método en iOS es que StackView primero seleccione los componentes a continuación, en el editor, incrustar en, Pila de Vista,

    conectar la nueva pila de vista con IBOutlet, entonces:

    oculto:

    UIView * firstView = self.svViewFontConfigure.arrangedSubviews[0];
            firstView.hidden = YES;

    visibilidad:

    UIView * firstView = self.svViewFontConfigure.arrangedSubviews[0];
            firstView.hidden = NO;

    como el uso de la pila de vista, todas las restricciones se keeped!

    Documento

    • Parece una muy buena solución en realidad, pero vale la pena tomar nota de que las necesidades de iOS9+.
    • He utilizado la solución brillante (+1 para ti, muchas gracias!!) pero me he conectado a través de IBOutlet directamente el punto de vista que quería mostrar y ocultar, así que he de escribir una sola línea de código! 🙂
    • Esta respuesta, en realidad no es correcto. Android Ver.IDO quita la vista de la interfaz de usuario. Por ejemplo, si ajusta la Vista.Dado un elemento, vistas a continuación que wiew se desplazará hacia arriba. Así que su propuesta sólo se oculta de la vista, que es igual a la Vista.OCULTAR. Mira esta respuesta : stackoverflow.com/questions/11556607/…
    • Yo no buscar en android api… Pero yo soy desarrollador móvil, por lo que yo sé mecánico… En Android con indicador booleano punto de vista puede ser visible o no(Ido,Visible) Si se elimina de la interfaz de usuario será difícil para agregar nuevo… pero en ios,en el diseño, pero sin espacios…. Además, Hay oficialmente ios ocultos de los bienes que se llevará a cabo…UIStackview ocultos de la propiedad como android Ver.Ido
  3. 16

    agregar una altura de restricción a la vista de la siguiente manera:iOS equivalente para Android Ver.IDO modo de visibilidad

    a continuación, hacer una toma de corriente para la altura de la restricción en su viewController archivo de la siguiente manera:iOS equivalente para Android Ver.IDO modo de visibilidad

    & a continuación, en el método viewDidLoad cambio de restricción de altura a 0 como sigue:

    override func viewDidLoad() {
        super.viewDidLoad()
    nsLcButtonHeight.constant = 0
    }
    • constante la altura de la mierda, yo uso la misma altura y multiplicador, por ejemplo, para tener el 25% de los padres de la vista, algún ejemplo de esto?
  4. 5

    Para lograr los Androides.IDO funcionalidad en iOS es el uso de un UIStackView. Después de que ocultar el niño por la posición. (Las manzanas de la documentación)

    SWIFT 4:

    let firstView = cell.rootStackView.arrangedSubviews[0]
        firstView.isHidden = true //first view gone

    Es una celda de la tabla de ejemplo, sólo hay que poner tanto interior Stack view y obtener elemento para GONE el niño.

    iOS equivalente para Android Ver.IDO modo de visibilidad

  5. 1

    1) Si los botones están colocados verticalmente, a continuación, debe establecer la height a 0 y en el caso de los botones colocados horizontalmente, pruebe a establecer width a 0 o se puede establecer a 0.

    O

    2) puedes probar este enfoque, que establece button2 en la parte superior de button1:

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button1 setTitle:@"hello" forState:UIControlStateNormal];
    
    UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button2 setTitle:@"world" forState:UIControlStateNormal];
    
    [button1 sizeToFit]; [button2 sizeToFit];
    [button2 setFrame:CGRectMake(button1.frame.origin.x, button1.frame.origin.y, button2.frame.size.width, button2.frame.size.height)];
    
    [self.view addSubview:button1];
    [self.view addSubview:button2];
    
    }
    • por favor, mostrar algo de código de lo que han hecho.
  6. 0

    Que mi investigación ha demostrado, ni siquiera Autodiseño puede ayudar. Usted tiene que reemplazar manualmente los puntos de vista afectados por la opcionalmente se muestra el componente (en mi caso, todos los puntos de vista a la parte inferior de la vista opcional, pero estoy seguro de que usted puede adaptar para controlar todos los botones a la derecha de los botones opcionales):

    - (IBAction)toggleOptionalView:(id)sender {
        if (!_expanded) {
            self.optionalView.frame = CGRectMake(self.optionalView.frame.origin.x, self.optionalView.frame.origin.y, self.optionalView.frame.size.width, _optionalHeight);
            self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, self.bottomView.frame.origin.y+_optionalHeight, self.bottomView.frame.size.width, self.bottomView.frame.size.height);
            _expanded = YES;
        } else {
            self.optionalView.frame = CGRectMake(self.optionalView.frame.origin.x, self.optionalView.frame.origin.y, self.optionalView.frame.size.width, 0);
            self.bottomView.frame = CGRectMake(self.bottomView.frame.origin.x, self.bottomView.frame.origin.y-_optionalHeight, self.bottomView.frame.size.width, self.bottomView.frame.size.height);
            _expanded = NO;
    
        }
    }

    Es aconsejable no duro-código de la altura/anchura de los componentes opcionales, de lo contrario el código de descanso cada vez que se edite el XIB/Storyboard. Tengo un campo de flotación _optionalHeight que me puse en viewDidLoad, de modo que siempre está hasta la fecha.

  7. 0

    También puede borrar la página, o al menos de ciertas células de la página, y redefinir toda la cosa. Es rápido y funciona bien. Yo no se escribir el código, pero encontraron en esta pre-existente proyecto en el que estoy trabajando. Crear ManagementTableSection y ManagementTableCell clases para manejar todo. Siento no poder ofrecer a definir mejor el código.

  8. 0

    Edificio de la respuesta proporcionada por Deniz, aquí es una solución de uso de restricciones en Swift

    Por ejemplo: Si usted tiene 3 vistas, A_view B_view y C_view alineados verticalmente en que orden y que quiere «Ocultar» B y también ajustar la diferencia, agregar una restricción

    B_view.removeFromSuperView()
    var constr = NSLayoutConstraint(item: C_view, 
                                    attribute: NSLayoutAttribute.Top, 
                                    relatedBy: NSLayoutRelation.Equal, 
                                    toItem: A_view, 
                                    attribute: NSLayoutAttribute.Bottom,
                                    multiplier: 1,
                                    constant: 20)
    view.addConstraint(constr)

    constante (en este caso) la cantidad de espacio vertical entre C_view y A_view

  9. 0

    He añadido una nueva propiedad a un programa personalizado de UIView aplicación llamada «visible» que, cuando se establece en false, se agrega una restricción a contraer la vista (sólo he añadido un ancho de restricción, ya que mi lista es horizontal, pero la mejor forma podría ser la de añadir una restricción de altura de 0 así).

    var visible:Bool = true{
            didSet{
                if(visible){
                    clipsToBounds = false;
                    removeConstraint(hideConstraint!)
                }else{
                    clipsToBounds = true
                    addConstraint(hideConstraint!)
                }
            }
        }

    Necesario para inicializar el ancho cero restricción de la vista y de añadir un campo:

    private var hideConstraint:NSLayoutConstraint?
    
    
    func someInitFunction(){
        hideConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1.0, constant: 0.0)
        ...
    }
  10. 0

    Esta pregunta es bastante viejo, pero el armario cosa que me he encontrado, es la configuración de las restricciones adicionales (de modo que los puntos de vista en torno a la «desaparecido» ver saber qué hacer una vez que la falta)

    A  which you want to be     A
    |  after setting B to gone  |
    B                           C
    |                               
    C                               
    1. Establecer una prioridad menor (750) restricción de C a A.
    2. Añadir B de la parte superior e inferior de restricciones (o a la izquierda y a la derecha si desea que su vista al colapso horizontalmente) a un NSLayoutConstraint matriz bConstraints. Hacer esto:
      1. De Control, haga clic y arrastre desde la restricción a la ViewController
      2. Cambio de la Conexión de la Toma de corriente a la Salida de la Colección de
      3. Para poner nombre bConstraints.
      4. Damos a connect. Esto creará un @IBOutlet var bConstraints: [NSLayoutConstraint]! en su ViewController
      5. Para agregar restricciones adicionales: el arrastre de la restricción en el Guión gráfico para el @IBOutlet nombre de la variable
    3. A continuación, ocultar B

      B.hidden = true
      NSLayoutConstraint.deactivateConstraints(bConstraints)
    4. Para mostrar

      B.hidden = false
      NSLayoutConstraint.activateConstraints(bConstraints)

    Obviamente más y más puntos de vista que usted tiene la más compleja esta crece, a medida que usted necesita restricciones adicionales de cada vista

    • coudlnt implementar, es por eso que usted no consigue los votos
    • sería más útil si se la explicó por qué no pudo implementar
    • El segundo punto. Estoy trabajando en Xamarin, aunque. Todavía no ha encontrado una solución para este problema. No sé cómo se debe construir un NSLayoutConstraint matriz con B las restricciones. Supongo que se realiza a través de programación, sería bueno ver el código para que. Tu método me parece ser la más razonable manera de abordar este problema, sin embargo no es fácil de implementar con sólo pseudo-código
    • No he utilizado Xamarin. La manera que se hace en XCode es: ctrl-clic y arrastre desde la restricción a la ViewController (esto es similar a cómo wold crear un IBOutlet en xcode). En la ventana emergente que aparece (similar a i.stack.imgur.com/JegLK.png) cambio de la «Conexión» en el menú desplegable de Outlet a Outlet Collection. Para restricciones adicionales, ctrl arrastrar directamente al nombre de la variable. Puedo subir sceenshots el día de hoy (en ~8 horas)
    • así que el NSLayoutConstraint matriz es la salida de la colección, que tiene un poco perdido aquí jaja, gracias por tomar su tiempo para responder a mis preguntas 🙂
    • sí, voy a actualizar la respuesta para ser más claros. Así que la solución es trabajar para usted?
    • Todavía estoy tratando, pero encontrar difícil hacer la conexión de salida en xamarin. El otro problema es que tengo un UIImageView con el centro.y conectado con el lado derecho de la B ver cual es la opinión que tengo que ocultar
    • No es necesario involucrar a subvista restricciones a todos. Estás teniendo dificultades para seleccionar la restricción para usted presione ctrl y arrastre? Presione ctrl y arrastre desde el esquema del documento si es más fácil que tener que seleccionar la restricción en el interface builder – static1.squarespace.com/static/56ddcaef01dbae76cf85000d/t/…

  11. -2

    setHidden:VERDADERO/FALSO, es el equivalente más cercano a Android Ver.PASADO/VISIBLE.

    La Vista no necesariamente el espacio si no es visible!

    He hecho un ComboBox-por Igual con un ListView poniendo en la parte superior de otros puntos de vista. Yo solo visibles, mientras que la selección:

    iOS equivalente para Android Ver.IDO modo de visibilidad

    • se le olvidó que en android también tenemos a la vista.invisible… ver.ido no es similar a setHidden… su punto de vista.invisible que es similar a setHidden

Dejar respuesta

Please enter your comment!
Please enter your name here