2

У меня есть разработать DeviceLayout библиотека enter link description hereIBDesignable рендеринг NSLayoutConstraint подкласс

enter image description here

Библиотека позволяет DeviceLayoutConstraint установить AutoLayout константы за размер устройства

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() 
} 

на устройство постоянная свойство применяется во время выполнения имитатора или устройство

My qu estion is

Возможно ли рендеринг рендеринга с использованием IBInspectable или IBDesignable при выборе устройства?

Я хочу проверить рендеринг в Раскадровка или XIb файл, когда тип устройства изменен

enter image description here

+0

Полностью несвязанный, но я не уверен, что предлагаю вызвать 'layoutIfNeeded' в' updateConstraint'. Я бы назвал 'setNeedsLayout'. Если вам приходится обновлять кучу констант, вы не хотите запускать слишком много избыточных циклов компоновки. – Rob

ответ

1

Да, ограничение (будь то ваш подкласс или стандартные ограничения) полностью совместим с DESIGNABLE видом. Очевидно, что это требует, чтобы ваш вид @IBDesignable обрабатывал изменения в размере правильно, но мы обычно это делаем.

Например, если у вас есть проектируемый вид, что добавляет круглую форму CAShapeLayer, вы бы добавить CAShapeLayer один раз и только один раз в соответствующих init методах, но обновлять, что слой path в методе layoutSubviews. Например, см. CircleView.

Но если вы правильно отрегулируете макет размера, вы также автоматически обрабатываете ограничения.

Смежные вопросы