2

je développer une DeviceLayout Bibliothèque enter link description hereIBDesignable rendu sous-classe NSLayoutConstraint

enter image description here

cette bibliothèque fournissent DeviceLayoutConstraint à une valeur constante AutoLayout par taille de l'appareil

import UIKit 

import Device 
class DeviceLayoutConstraint: NSLayoutConstraint { 

    @IBInspectable var inch3_5: CGFloat = 0.0 { didSet { updateConstant(size: .screen3_5Inch, constant: inch3_5)}} 
    @IBInspectable var inch4: CGFloat = 0.0 { didSet { updateConstant(size: .screen4Inch, constant: inch4)}} 
    @IBInspectable var inch4_7: CGFloat = 0.0 { didSet { updateConstant(size: .screen4_7Inch, constant: inch4_7)}} 
    @IBInspectable var inch5_5: CGFloat = 0.0 { didSet { updateConstant(size: .screen5_5Inch, constant: inch5_5)}} 
    @IBInspectable var inch7_9: CGFloat = 0.0 { didSet { updateConstant(size: .screen7_9Inch, constant: inch7_9)}} 
    @IBInspectable var inch9_7: CGFloat = 0.0 { didSet { updateConstant(size: .screen9_7Inch, constant: inch9_7)}} 
    @IBInspectable var inch12_9: CGFloat = 0.0 { didSet { updateConstant(size: .screen12_9Inch, constant: inch12_9)}} 

    fileprivate func updateConstant(size: Size, constant: CGFloat) { 
     if size == deviceSize() { 
      self.constant = constant 
      layoutIfNeeded() 
     } 
    } 

    open func deviceSize() -> Size { 
     return Device.deviceSize 
    } 

    open func layoutIfNeeded() { 
     self.firstItem.layoutIfNeeded() 
     self.secondItem?.layoutIfNeeded() 
    } 
} 

fileprivate extension Device { 
    static let deviceSize = Device.size() 
} 

par dispositif propriété constante appliquée dans le simulateur d'exécution ou appareil

Mon estion est

Est-il possible de rendre la mise à jour en utilisant IBInspectable ou IBDesignable lorsque vous sélectionnez Périphérique?

Je veux vérifier le rendu dans le fichier Storyboard ou Xib lorsque le type de l'appareil modifié

enter image description here

+0

Complètement sans rapport, mais je ne suis pas sûr que je suggérerais d'appeler 'layoutIfNeeded' dans' updateConstraint'. J'appellerais probablement 'setNeedsLayout'. Si vous mettez à jour un certain nombre de constantes, vous ne voulez pas déclencher trop de cycles de mise en page redondants. – Rob

Répondre

1

Oui, les contraintes (si votre sous-classe ou les contraintes standard) sont parfaitement compatibles avec les vues concevables. De toute évidence, il faut que votre vue @IBDesignable gère correctement les changements de taille, mais nous le faisons généralement.

Par exemple, si vous avez une vue DesignAble qui ajoute une forme circulaire CAShapeLayer, vous ajouteriez la fois CAShapeLayer et une seule fois dans les init appropriées des méthodes, mais mettre à jour path de cette couche dans la méthode layoutSubviews. Par exemple, voir CircleView. Mais si vous gérez correctement les changements de format, vous gérez également les contraintes de manière appropriée.