2017-08-15 2 views
0

Je crée une application de chat et j'ai créé un composant persona qui est implémenté dans la vue en utilisant Container view. Je veux qu'il ait une largeur maximale donc sur iPhone il sera en pleine largeur mais sur iPad au centre avec une largeur fixe. Aussi sur iPhone en orientation paysage il devrait être scrollable (j'utilise déjà Scroll view mais exactement en orientation paysage il se comporte bizarrement).Comment créer une mise en page réactive dans Xcode (pas la mise en page automatique)?

Create persona component

Voici comment créer le composant de persona ressemble. Il avait tous les éléments dans View mais Xcode a dit qu'il s'agit d'erreurs. Maintenant, il a tous les éléments séparés, ils ont une largeur < = 350 et de fuite et menant les marges> = 0 - et tout cela fonctionne bien, mais quand j'insérer ce composant dans la vue (il ressemble à ceci):

It looks like this

... en utilisant Container view enveloppé avec Scroll view il se comporte bizarrement. J'ai donné Container view contraintes en haut, en bas, à gauche et à droite tous égaux à 0 mais Xcode afficher avertissement que y n'est pas égal à prévu. Il ne peut pas faire Container view aussi grand que Scroll view. Aussi je veux le faire défiler ainsi quand la taille d'écran n'est pas assez pour montrer la forme entière que vous pouvez la faire défiler. Mais maintenant, lorsque vous faites pivoter l'écran en mode paysage, la taille de Container view change également et Scroll view ne peut pas être défilée. Des idées?

Répondre

1

Vous pouvez le faire en Storyboard en sélectionnant l'Attributes inspector de l'élément que vous souhaitez personnaliser en fonction de la taille de l'écran et en cliquant sur le signe + sur la gauche de la propriété que vous souhaitez personnaliser. Cependant, cela ne fournit que des options très limitées, donc vous feriez mieux de le faire soit en code et en vérifiant la taille de l'écran par programmation ou en utilisant différents Storyboards pour iPad et iPhone.

Pour utiliser différents storyboards, vous pouvez effectuer les opérations suivantes:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    let screenWidth = UIScreen.main.bounds.width 
    let orientation = UIDevice.current.orientation 

    if screenWidth > x { //use iPad storyboard 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "identifier") 
     self.window.rootViewController = vc 
    } else { 
        let storyboard = UIStoryboard(name: "OtherStoryboard", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "otherIdentifier") 
     self.window.rootViewController = vc 
    } 
... 
} 
+0

Si pour créer différents stroryboards comment la mettre en œuvre à l'existant et mettez-les en fonction de l'appareil? – Masiama

+0

Et qu'en est-il de la vue conteneur défilante? Sans défilement, il n'est pas défilable du tout, mais en l'utilisant rien ne change, seul l'effet de rebond apparaît – Masiama

+0

J'ai inclus le code pour changer de storyboard. –