Post

Replies

Boosts

Views

Activity

Reply to Xcode simulator does not show the same as Preview
Hello, well, I am going to tell you about the problem and the "solution" that I have obtained. A few days ago, because I followed one of Apple's tutorials (https://developer.apple.com/tutorials/app-dev-training/displaying-data-in-a-list), I came up with the idea of simplify my code, I wanted to create a list using cards with CHANGING INFORMATION, and to be able to add or remove data easily. Since I'm new to Swift (I've used more C and Python), I didn't know how to do it, so I followed the tutorial above. I had many problems adding the code and Xcode did not stop complaining and "screaming" 😂, once I changed the code to what you see up there more or less (things are missing and there are many others that the program does not use but, for various reasons, I have not erased 😅), and Xcode did the miracle, it did not complain, there was nothing in red and in Preview it looked just the way I wanted, my pain came, when I connected my iPhone to see the result of my work, and I found a blank app, I built it in the simulator and it also happened the same, there was nothing. I spent the next few days researching the problem, desperate, tired, and stymied, I wrote on the forum. I thank the two people who have answered me, their effort and time dedicated to my problem, I really believed that no one was going to appear and I appreciate it very much. After reading the last answer, I gave up and went back to the backup I made before changing anything, but my stubbornness didn't leave me alone and I removed all the code except a rectangle, foreach, and the data. IN SUMMARY: FOREACH DOES NOT ACCEPT DATA THAT CHANGES WITH TIME, YOU GIVE IT A FIXED LIST, A STRING, WITH ALREADY KNOWN DATA AND PROCESSES IT. THE PROBLEM IS THAT IF THE FOREACH FUNCTION IS DESIGNED FOR IMMUTABLE DATA IT SHOULD, AT LEAST, GIVE AN ERROR IF THE DATA IS VAR INSTEAD OF LET, XCODE YELLS AT ME AND PUTS EVERYTHING IN RED, HOWEVER IT COMPILES IT BOTH IN THE SIMULATOR AS IN PREVIEW, WITHOUT IMMUTING. AND IF IT'S A BUG AND NOT DESIGNED FOR THAT, PLEASE, PREVIEW SHOULD NOT WORK. THAT I GOT HAPPY AND THEN I CRY. 🤣🤣 Well that's it, thanks for your patience. Good afternoon.
Nov ’21
Reply to Xcode simulator does not show the same as Preview
func interfazCambio () -> Void {             let modelo = UIDevice.modelName             let flotanteModelo = (modelo as NSString).floatValue             print(modelo)              else if (flotanteModelo == 4.7){                 //<<<<<<<<<<<<<<<<<<ESTRUCTURAS>>>>>>>>>>>>>>>>>                 interfazCambiante.separaciónMedicacionUsuarios = 252                 interfazCambiante.separacionEntreElementos = 100                 interfazCambiante.separacionUsuariosAnuncios = 145                 interfazCambiante.logoX = 185                 interfazCambiante.logoY = 175                 //<<<<<<<<<<<<<<<<MENÚ CABECERA>>>>>>>>>>>>>>>>>                 interfazCambiante.plantillaLargo = 25                 interfazCambiante.circuloAncho = 200                 interfazCambiante.iconosMenu = 26                 interfazCambiante.separacionIconosMenu = 215                 interfazCambiante.separacionIndividialIconosMenu = 25                 interfazCambiante.altoPlantilla = 20                 interfazCambiante.alturaMenu = 40                 interfazCambiante.separacionMenuTarjetas = 15                 //<<<<<<<<<<<<<<<<<<<TARJETAS>>>>>>>>>>>>>>>>>>>>                 interfazCambiante.altoTarjetas = 185// Se queda                 interfazCambiante.anchoTarjetas = 30                 interfazCambiante.espacioEntreTarjetas = 35                 //<<<<<<<<<<<<<<CONTENIDO TARJETAS>>>>>>>>>>>>>>>                 interfazCambiante.tamanoTituloTarjetas = 20                 interfazCambiante.posicionTituloMananaX = 290                 interfazCambiante.posicionTituloMediodiaX = 194                 interfazCambiante.posicionTituloTardeX = 137                 interfazCambiante.posicionTituloNocheX = 79                 interfazCambiante.posicionTituloTarjetasY = 20                 interfazCambiante.tamanoCirculos = 90                 interfazCambiante.anchoCirculos = 10                 interfazCambiante.posicionCirculosX = 90                 interfazCambiante.posicionCirculosY = 85                 interfazCambiante.tamanoSiguienteToma = 15                 interfazCambiante.tamanoCompartidoCon = 12                 interfazCambiante.posicionSiguienteTomaX = 90                 interfazCambiante.posicionSiguienteTomaY = 150                 interfazCambiante.posicionCompartidoConX = 90                 interfazCambiante.posicionCompartidoConY = 170                 //<<<<<<<<<<<<<<DISTANCIA CABECERA-CONTENIDO SEGÚN TAMAÑO DE LETRA>>>>>>>>>>>>>>>                 interfazCambiante.normal = -10                 interfazCambiante.extraSmall = -2                 interfazCambiante.small = -8                 interfazCambiante.medium = -10                 interfazCambiante.large = -10                 interfazCambiante.extraLarge = -18                 interfazCambiante.extraExtraLarge = -18                 interfazCambiante.extraExtraExtraLarge = -20                 interfazCambiante.activeAccesibility = 0                 interfazCambiante.separacionRelojListaiPad = 0                 print("4.7")             }
Nov ’21
Reply to Xcode simulator does not show the same as Preview
func interfazCambio () -> Void {             let modelo = UIDevice.modelName             let flotanteModelo = (modelo as NSString).floatValue             print(modelo)              if (flotanteModelo < 4.7){             //Que devuelva los parámetros                 //<<<<<<<<<<<<<<<<<<ESTRUCTURAS>>>>>>>>>>>>>>>>>                 interfazCambiante.separaciónMedicacionUsuarios = 210                 interfazCambiante.separacionEntreElementos = 100                 interfazCambiante.separacionUsuariosAnuncios = 125                 interfazCambiante.logoX = 160                 interfazCambiante.logoY = 170                 //<<<<<<<<<<<<<<<<MENÚ CABECERA>>>>>>>>>>>>>>>>>                 interfazCambiante.plantillaLargo = 25                 interfazCambiante.circuloAncho = 185                 interfazCambiante.iconosMenu = 25                 interfazCambiante.separacionIconosMenu = 200                 interfazCambiante.separacionIndividialIconosMenu = 25                 interfazCambiante.altoPlantilla = 20                 interfazCambiante.alturaMenu = 10                 interfazCambiante.separacionMenuTarjetas = 10                 //<<<<<<<<<<<<<<<<<<<TARJETAS>>>>>>>>>>>>>>>>>>>>                 interfazCambiante.altoTarjetas = 170 // Se queda                 interfazCambiante.anchoTarjetas = 50                 //Esta es la separación                 interfazCambiante.espacioEntreTarjetas = 25                 //<<<<<<<<<<<<<<CONTENIDO TARJETAS>>>>>>>>>>>>>>>                 interfazCambiante.tamanoTituloTarjetas = 16                 interfazCambiante.posicionTituloMananaX = 250                 interfazCambiante.posicionTituloMediodiaX = 165                 interfazCambiante.posicionTituloTardeX = 123                 interfazCambiante.posicionTituloNocheX = 72                 interfazCambiante.posicionTituloTarjetasY = 15                 interfazCambiante.tamanoCirculos = 80                 interfazCambiante.anchoCirculos = 12                 interfazCambiante.posicionCirculosX = 90                 interfazCambiante.posicionCirculosY = 75                 interfazCambiante.tamanoSiguienteToma = 15                 interfazCambiante.tamanoCompartidoCon = 10                 interfazCambiante.posicionSiguienteTomaX = 90                 interfazCambiante.posicionSiguienteTomaY = 130                 interfazCambiante.posicionCompartidoConX = 80                 interfazCambiante.posicionCompartidoConY = 150                 //<<<<<<<<<<<<<<DISTANCIA CABECERA-CONTENIDO SEGÚN TAMAÑO DE LETRA>>>>>>>>>>>>>>>                 interfazCambiante.normal = -13                 interfazCambiante.extraSmall = -10                 interfazCambiante.small = -12                 interfazCambiante.medium = -13                 interfazCambiante.large = -13                 interfazCambiante.extraLarge = -18                 interfazCambiante.extraExtraLarge = -20                 interfazCambiante.extraExtraExtraLarge = -23                 interfazCambiante.activeAccesibility = 0                 interfazCambiante.separacionRelojListaiPad = 0                             } the text is too long and it won't let me write it, thanks again!!
Nov ’21
Reply to Xcode simulator does not show the same as Preview
struct interfazCambiante {      //-----------------------------------------------------------------TARJETAS-----------------------------------------------------------------          static var altoTarjetas: CGFloat =  0 // Se queda     static var anchoTarjetas = 0     static var espacioEntreTarjetas = 0     static var separacionMenuTarjetas = 0     static var separaciónMedicacionUsuarios = 0     static var separacionEntreElementos = 0     static var separacionUsuariosAnuncios = 0      //------------------------------------------------------------CONTENIDO TARJETAS-------------------------------------------------------------          //@Environment(\.sizeCategory) public var sizeCategory: ContentSizeCategory     @State private var accesibilidadActiva: Bool = false     @State private var textoTarjeta: String = ""     @State private var colorTextoTarjeta: Color = Color(red: 0, green: 0, blue: 0)     static var tamanoLetra: CGFloat = 0     //<<<<<<<<<<<<<<DISTANCIA CABECERA-CONTENIDO SEGÚN TAMAÑO DE LETRA>>>>>>>>>>>>>>>     static var normal: CGFloat = 0     static var extraSmall: CGFloat = 0     static var small: CGFloat = 0     static var medium: CGFloat = 0     static var large: CGFloat = 0     static var extraLarge: CGFloat = 0     static var extraExtraLarge: CGFloat = 0     static var extraExtraExtraLarge: CGFloat = 0     static var activeAccesibility: CGFloat = 0     static var separacionRelojListaiPad: CGFloat = 0     //-------------------------------------------------------------------------------     static var tamanoTituloTarjetas = 0     static var posicionTituloNocheX = 0     static var posicionTituloTardeX = 0     static var posicionTituloMediodiaX = 0     static var posicionTituloMananaX = 0     static var posicionTituloTarjetasY = 0     static var posicionRestoLetrasTarjetaX = 0     static var posicionRestoLetrasTarjetaY = 0     static var tamanoRestoLetrasTarjeta = 0     static var tamanoCirculos: CGFloat = 0     static var anchoCirculos: CGFloat = 0     static var posicionCirculosX = 0     static var posicionCirculosY = 0     static var tamanoSiguienteToma = 0     static var posicionSiguienteTomaX = 0     static var posicionSiguienteTomaY = 0     static var tamanoCompartidoCon = 0     static var posicionCompartidoConX = 0     static var posicionCompartidoConY = 0     static var contador = 0      //-------------------------------------------------------------------MENÚ----------------------------------------------------------------------          static var alturaMenu = 0     static var plantillaLargo = 0     static var circuloAncho =  0     static var iconosMenu = 0     static var separacionIconosMenu = 0     static var separacionIndividialIconosMenu = 0     static var altoPlantilla = 0     //static var anuncioY = 0     static var logoX = 0     static var logoY = 0 }
Nov ’21
Reply to Xcode simulator does not show the same as Preview
struct tarjMomentoDia: Identifiable, Hashable {          var id: UUID     var colorFondo: Color     var altoTarjetas: CGFloat     var textoTitulo: String     var colorLetraTitulo: Color     var imagenMedicamento: String     var nombreImagenSistema: String     var hayFotografia: Bool     var nombreMedicamento: String     var textoTiempo: String     var temporizador: Int     var anchoRelojCircular: CGFloat     var diametroReloj: CGFloat     var offset: CGFloat// Esto es la separación del texto          init(id: UUID = UUID(), colorFondo: Color, altoTarjetas: CGFloat, textoTitulo: String, colorLetraTitulo: Color, imagenMedicamento: String, nombreImagenSistema: String, hayFotografia: Bool, nombreMedicamento: String, textoTiempo: String, temporizador: Int, anchoRelojCircular: CGFloat, diametroReloj: CGFloat, offset: CGFloat ) {                self.id = id         self.colorFondo = colorFondo         self.altoTarjetas = altoTarjetas         self.textoTitulo = textoTitulo         self.colorLetraTitulo = colorLetraTitulo         //self.separacion = separacion         self.imagenMedicamento = imagenMedicamento         self.nombreImagenSistema = nombreImagenSistema         self.hayFotografia = hayFotografia         self.nombreMedicamento = nombreMedicamento         self.textoTiempo = textoTiempo         self.temporizador = temporizador         self.anchoRelojCircular = anchoRelojCircular         self.diametroReloj = diametroReloj         //self.separacionTextoEniPad = separacionTextoEniPad         //self.accesibilidad = accesibilidad         self.offset = offset              } } /*Esto no puede ser static var si una de las variables cambia con el tiempo*/ extension tarjMomentoDia {      static var datos: [tarjMomentoDia] {         [                          tarjMomentoDia(colorFondo: Color(red: 0.8, green: 1.0, blue: 0.92), altoTarjetas: interfazCambiante.altoTarjetas, textoTitulo: "Mañana", colorLetraTitulo: Color(red: 0.08, green: 0.32, blue: 0.39), imagenMedicamento: "", nombreImagenSistema: "pills.fill", hayFotografia: false, nombreMedicamento: "Alprazolam 200mg", textoTiempo: "Siguiente Toma", temporizador: 12, anchoRelojCircular: interfazCambiante.anchoCirculos, diametroReloj: interfazCambiante.tamanoCirculos, offset: 0)                      ]     } }
Nov ’21
Reply to Xcode simulator does not show the same as Preview
struct ContentView: View {     @Environment(\.sizeCategory) var category     /*Inicialización de variables*/     //Hay que inicializar las clases y las funciones para que operen     // El @State es muy importante para que funcione la accesibilidad y también para que no chille     @State var accesibilidadActivaTexto = false //Cambiar a true     @State var separacioTexto: CGFloat = 0 // Separación entre texto     @State var separacionTextoiPad: CGFloat = 0     @State var cambioFuente: ContentSizeCategory = .large {         didSet{             //el problema es que category no se actualiza             accesibilidadActiva()         }     }     let contTarj: [tarjMomentoDia] = tarjMomentoDia.datos     let tamanosPantalla = tamanosDispositivos()     init(){         tamanosPantalla.interfazCambio()     /*Esto permite ejecutar funciones metidas en una clase que no de resultado y guarde lo que realice en una estructura*/     }     var body: some View {         ZStack{             VStack{                 ZStack{                     ForEach(contTarj, id: \.self) {tarjMomentoDia in                         tarjetaMomentoDia(colorFondo: tarjMomentoDia.colorFondo, altoTarjetas: tarjMomentoDia.altoTarjetas, textoTitulo: tarjMomentoDia.textoTitulo, colorLetraTitulo: tarjMomentoDia.colorLetraTitulo, separacion: separacioTexto, imagenMedicamento: tarjMomentoDia.imagenMedicamento, nombreImagenSistema:tarjMomentoDia.nombreImagenSistema, hayFotografia: false, nombreMedicamento: tarjMomentoDia.nombreMedicamento, textoTiempo: tarjMomentoDia.textoTiempo, temporizador: tarjMomentoDia.temporizador, anchoRelojCircular: tarjMomentoDia.anchoRelojCircular, diametroReloj: tarjMomentoDia.diametroReloj, separacionTextoEniPad: separacionTextoiPad, accesibilidad: accesibilidadActivaTexto).offset(y:tarjMomentoDia.offset)                     }             }         }.onAppear(perform: {cambioFuente = category;accesibilidadActiva()})//Los corchetes, la función y el texto en general es muy importante     }.onChange(of: category, perform: {value in cambioFuente = value})/*He conseguido que funcione pero "category" no se actualiza porque es una variable del sistema que solo reacciona ante estímulos de este, es por eso que necesito una variable auxiliar "cambioFuente" para que funcione el conjunto*/ }     //Esta función permite crear una varible que indique si está activo el texto Accesible     func accesibilidadActiva() -> Void {         /*Se pueden añadir más if para otras cosas de accesibilidad relacionadas*/         /*Mira si la letra es accesible o no y lo copia en la variable creada*/         if cambioFuente != .accessibilityMedium && cambioFuente != .accessibilityLarge && cambioFuente != .accessibilityExtraLarge &&  cambioFuente != .accessibilityExtraExtraLarge && cambioFuente != .accessibilityExtraExtraExtraLarge {             self.accesibilidadActivaTexto = false         }else{             self.accesibilidadActivaTexto = true         }         switch cambioFuente {/* Esto permite modificar la distancia según la pantalla y el tamaño de la letra*/             case .extraSmall:                 separacioTexto = interfazCambiante.extraSmall                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .small:                 separacioTexto = interfazCambiante.small                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .medium:                 separacioTexto = interfazCambiante.medium                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .large:                 separacioTexto = interfazCambiante.large                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .extraLarge:                 separacioTexto = interfazCambiante.extraLarge                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .extraExtraLarge:                 separacioTexto = interfazCambiante.extraExtraLarge                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .extraExtraExtraLarge:                 separacioTexto = interfazCambiante.extraExtraExtraLarge                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .accessibilityMedium:                 separacioTexto = interfazCambiante.activeAccesibility                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .accessibilityLarge:                 separacioTexto = interfazCambiante.activeAccesibility                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .accessibilityExtraLarge:                 separacioTexto = interfazCambiante.activeAccesibility                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .accessibilityExtraExtraLarge:                 separacioTexto = interfazCambiante.activeAccesibility                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             case .accessibilityExtraExtraExtraLarge:                 separacioTexto = interfazCambiante.activeAccesibility                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad             @unknown default:                 separacioTexto = interfazCambiante.large                 separacionTextoiPad = interfazCambiante.separacionRelojListaiPad         }     } }
Nov ’21
Reply to Xcode simulator does not show the same as Preview
struct tarjetaMomentoDia: View{     var colorFondo: Color     var altoTarjetas: CGFloat     var textoTitulo: String     var colorLetraTitulo: Color     var separacion: CGFloat     var imagenMedicamento: String     var nombreImagenSistema: String     var hayFotografia: Bool     var nombreMedicamento: String     var textoTiempo: String     var temporizador: Int     var anchoRelojCircular: CGFloat     var diametroReloj: CGFloat     var separacionTextoEniPad: CGFloat     var accesibilidad: Bool     var body: some View {         Rectangle()             .frame(maxWidth: .infinity, maxHeight: altoTarjetas/*Hay que hacer variable*/)             .cornerRadius(30)             .foregroundColor(colorFondo)             .padding()             .overlay(                 VisualEffectBlurView(blurStyle: .systemUltraThinMaterialLight, vibrancyStyle: .fill, content: {/*AQUÍ SE PUEDE METER TEXTO*/})                     .frame(maxWidth: .infinity, maxHeight: altoTarjetas)// Esto junto a padding permite que funcione en cualquier dispositivo                     .mask(RoundedRectangle(cornerRadius: 30, style: .continuous))                     .overlay(RoundedRectangle(cornerRadius: 30, style: .continuous).stroke(lineWidth: 0.5).fill(Color.white))                     .shadow(color: Color.black.opacity(0.3), radius: 10, x: 0, y: 0)                     .padding()             ).overlay(                 VStack(spacing:separacion){                     HStack{                         tituloMomentoDia(texto: textoTitulo, colorLetras: colorLetraTitulo, accesibilidadTextoActiva: accesibilidad)                     }.padding(.top,20)                     HStack(spacing:separacionTextoEniPad){                         temporizadorMomentoDia(texto: textoTiempo, colorLetras: colorLetraTitulo, anchoCirculo: anchoRelojCircular, tamanoCirculo: diametroReloj, tiempoRestante: temporizador, accesibilidadTextoActiva: accesibilidad);                         vistaCompletaListaMedicamentos(imagenMedicamento: imagenMedicamento, nombreImagenSistema: nombreImagenSistema, hayFotografia: hayFotografia, nombreMedicamento: nombreMedicamento, accesibilidadTextoActiva: accesibilidad)                     }.padding(.horizontal)                 }.padding(.vertical,5)             )     } } It completely ignores the creation of the rectangle and the struct vistaCompletaListaMedicamentos, everything else executes it. Thanks for helping!!
Nov ’21