У меня есть «основное представление», в которое я пытаюсь загрузить несколько пользовательских представлений в ...
Внутри этого «основного представления» у меня есть «представления шаблона», в которые я хочу переместить настраиваемые представления ви вне (например, один «вид шаблона» может иметь настраиваемое представление с полем поиска в нем в одной точке жизненного цикла приложений, а в другой - в представлении изображения).Я хочу сделать это, чтобы не иметь много ViewControllers и Segues в моем приложении.
Я планирую сделать это, предоставив «основному представлению» несколько свойств экземпляра, которые имеют тип настраиваемых представлений различий, и несколько представлений шаблонов, которые будут содержать разные настраиваемые представления в зависимости от жизненного цикла приложения.
Внутри «основного представления» ViewDidLoad () Я инициализирую свойства настраиваемого представления, вызывая функцию CustomView.init (frame :), и передаю в функцию границы «представления шаблона». Мне нужен CustomView.быть размером с.
// РЕДАКТИРОВАТЬ: Я фактически инициализирую свойства пользовательского представления из функции awakeFromNib пользовательской ячейки.Ячейка загружается в табличное представление, которое является подпредставлением основного представления.//
Кажется, это работает ... за исключением того, что ширина пользовательского представления неверна при запуске приложения.Задний конец пользовательского представления простирается за ширину представления шаблона (вплоть до самого края экрана), но представление шаблона правильно завершает 10 точек перед задним краем экрана.
Внутри файла класса CustomView функция init выглядит следующим образом:
class CustomView: UIView {
var firstViewInHierarchy: UIView
var possibleFrame: CGRect? = nil
override init(frame: CGRect) {
super.init(frame: frame)
self.possibleFrame = frame
commonInit()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}
private func commonInit() {
Bundle.main.loadNibNamed("MainProfileView", owner: self, options: nil)
if let theFrame = self.possibleFrame {
self.firstViewInHierarchy.frame = theFrame
self.firstViewInHierarchy.bounds = theFrame
self.frame = theFrame
self.bounds = theFrame
}
filmView1.layer.cornerRadius = 10
filmView1.clipsToBounds = true
imageContainer.layer.cornerRadius = 10
imageContainer.clipsToBounds = true
imageView.layer.cornerRadius = 5
imageView.clipsToBounds = true
self.addSubview(firstView)
}
Я устанавливаю рамку и границы свойства CustomView.frame и свойства CustomView.firstViewInHierarchy для CGRectопределяется возможной рамкой, потому что я подумал, что если одна из них не установлена в возможную рамку, это приведет к неправильному размеру собственного представления после инициализации через вызов init (frame :) ... который я вызываю в «главном представлении»Настраиваемый класс ячеек таблицы с функцией awakeFromNib ... здесь:
class CustomCellThatGoesIntoMainView: UITableViewCell {
@IBOutlet weak var templateViewOne: UIView!
@IBOutlet weak var templateViewTwo: UIView!
var customView1: CustomViewTypeOne?
var customView2: CustomViewTypeTwo?
// the template views are actually inside a table view cell inside a tableview which is
// inside the main view
override func awakeFromNib() {
super.awakeFromNib()
self.customView1 = CustomViewType1(frame: templateViewOne.bounds)
self.templateViewOne.addSubview(profileView!)
self.customView2 = CustomViewType2(frame: templateViewTwo.bounds)
self.templateViewOne.addSubview(profileView!)
}
}
I resized one of the template views to have a much greater Height and the Custom View did size itself appropriately height-wise. However, it still extends to the very edge of the screen.
???