Используйте viewDidLoad для создания и WillLayout для позиционирования.
Я не рекомендую смешивать раскадровку и программно создавать пользовательский интерфейс
класс ViewController: UIViewController {
@IBOutlet weak var tabsSegmentedControl: UISegmentedControl!
var ingredientsTextView : UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
ingredientsTextView = UITextView(frame: .zero)
self.view.addSubview(ingredientsTextView)
ingredientsTextView.isEditable = false
ingredientsTextView.isSelectable = false
}
override func viewWillLayoutSubviews() {
let rect = CGRect(x: 20, y: self.tabsSegmentedControl.frame.maxY + 20, width: self.tabsSegmentedControl.frame.width, height: 127)
ingredientsTextView.frame = rect
ingredientsTextView.text = "There is a problem with the text view that's been programmatically created. It just pops up to ~20px at iPhoneX, but looks perfect at iPhone 8. I'll be super grateful for any hints :) Screenshots attached."
}
}