DEV Community

David Goyes
David Goyes

Posted on

SwiftUI #20: Prioridades

Un Stack divide el espacio de forma equidistante entre las vistas. Si las vistas no caben, asigna un tamaño fijo a los Image y reduce el tamaño de Text.

struct ContentView: View {
  var body: some View {
    HStack {
      Text("Hola Mundo")
        .font(.title)
        .lineLimit(1)
      Image(systemName: "circle")
        .font(.system(size: 100))
      Text("Hola Mundo")
        .font(.title)
        .lineLimit(1)
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

En el ejemplo anterior, el contenido de los campos Text está truncado por el uso de .lineLimit(1). De lo contrario, ocuparía más de una línea.

Para que un Text se muestre por completo, se debe cambiar su prioridad.

  • layoutPriority(_:). La prioridad por defecto de una vista para pintarse es 0. Una vista tomarea tanto espacio como le sea posible, entre más alta sea su prioridad.
  • fixedSize(horizontal:vertical:): Fija la vista a su tamaño ideal. Si no se especifica ningún argumento, el tamaño es fijado en ambas dimensiones.
struct ContentView: View {
  var body: some View {
    HStack {
      Text("Hola Mundo")
        .font(.title)
        .lineLimit(1)
      Image(systemName: "circle")
        .font(.system(size: 100))
      Text("Hola Mundo")
        .font(.title)
        .lineLimit(1)
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

fixedSize(horizontal:vertical:) tiene incluso más prioridad que layoutPriority(_:) puesto que si fixedSize(horizontal:vertical:) está activo en una vista, esta tomará el tamaño que necesita, sin importar la prioridad de los otros elementos.

struct ContentView: View {
  var body: some View {
    HStack {
      Text("Hola Mundo")
        .font(.title)
        .lineLimit(1)
        .fixedSize()
      Image(systemName: "circle")
        .font(.system(size: 100))
      Text("Hola Mundo")
        .font(.title)
        .lineLimit(1)
        .layoutPriority(100)
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)