#ios #swift #xcode #interface-builder
#iOS #swift #xcode #конструктор интерфейса
Вопрос:
У меня есть пользовательский вид и xib. Я использую это пользовательское представление в одном из представлений контроллера моей раскадровки.
У меня есть вариант использования, в котором я хочу иметь возможность скрыть пользовательский вид (и довести его высоту до нуля). Прямо сейчас я устанавливаю высоту в построителе интерфейса и устанавливаю ограничения на края супервизора:
Как вы можете видеть, я хочу, чтобы его высота была 84
везде.
Теперь вот класс моего пользовательского представления:
import UIKit
@IBDesignable
class BannerView: UIView {
@IBOutlet var contentView: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
override func awakeFromNib() {
super.awakeFromNib()
initialize()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
initialize()
contentView?.prepareForInterfaceBuilder()
}
func initialize() {
guard let view = loadViewFromNib() else { return }
view.frame = self.bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(view)
contentView = view
}
func loadViewFromNib() -> UIView? {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "BannerView", bundle: bundle)
return nib.instantiate(withOwner: self, options: nil).first as? UIView
}
func hide() {
// Hide the view and set its height to zero here
}
}
Но теперь я в замешательстве… должен ли я также устанавливать ограничение высоты в пользовательском представлении при загрузке его в одну из моих раскадровок? Или его высота должна быть 84
везде, и мне не нужно указывать ее дальше?
Кроме того, как бы мне скрыть пользовательский вид и установить его высоту равной нулю в приведенной выше hide()
функции?
Ответ №1:
Есть несколько способов сделать это… вот один.
Укажите содержимое ваших ограничений xib, чтобы его высота составляла 84 пункта. Вы не показали макет своего xib, но я предполагаю, что вы знаете, как это сделать.
Затем, когда вы добавляете BannerView
в свой основной вид (я предполагаю, что это то, что вы делаете), вставьте его в вертикаль UIStackView
с этими свойствами:
Теперь, когда вы устанавливаете bannerView.isHidden = true
, представление стека автоматически удаляет его из вычислений высоты, в результате чего представление стека имеет нулевую высоту.
bannerView.isHidden = false
Затем настройка повторно отобразит вид баннера вместе с его высотой.
Ответ №2:
Поскольку вы хотите, чтобы высота представления везде была 84, я думаю, вам следует добавить выход с ограничением высоты и установить значение 84. Установите значение ограничения равным 0, чтобы скрыть представление (я настоятельно рекомендую не скрывать какое-либо представление, делая это).
Комментарии:
1. Установил бы я ограничение высоты в Xib или где я включаю пользовательский вид в контроллер раскадровки?