Ios 如何在没有故事板的情况下设置ViewController的框架
我想在不使用情节提要的情况下使用ViewController创建视图(例如100x100)。我想知道声明ViewController框架的最佳方法是什么 我试过:Ios 如何在没有故事板的情况下设置ViewController的框架,ios,swift,view,viewcontroller,Ios,Swift,View,Viewcontroller,我想在不使用情节提要的情况下使用ViewController创建视图(例如100x100)。我想知道声明ViewController框架的最佳方法是什么 我试过: class MyLittleViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.frame = CGRect(x: 0, y: 0, width: 10
class MyLittleViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
}
}
我尝试在MainViewController上查看此视图:
override func viewDidLoad() {
super.viewDidLoad()
let myLittleView = MyLittleViewController()
myLittleView.willMove(toParent: self)
myLittleView.view.translatesAutoresizingMaskIntoConstraints = false
myLittleView.view.backgroundColor = .red
view.addSubview(myLittleView.view)
// enable auto-sizing (for example, if the device is rotated)
myLittleView.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addChild(myLittleView)
myLittleView.didMove(toParent: self)
myLittleView.view.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myLittleView.view.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
它不像我预期的那样工作,因为小视图没有出现在主视图中。有什么提示吗?您不应该将框架布局与自动布局混合,并设置宽度和高度约束
NSLayoutConstraint.activate([
myLittleView.view.centerXAnchor.constraint(equalTo: view.centerXAnchor),
myLittleView.view.centerYAnchor.constraint(equalTo: view.centerYAnchor),
myLittleView.view.heightAnchor.constraint(equalToConstant:100),
myLittleView.view.widthAnchor.constraint(equalToConstant:100)
])
或
myLittleView.view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
myLittleView.view.center = view.center
override func loadView() {
view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
}
或
myLittleView.view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
myLittleView.view.center = view.center
override func loadView() {
view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
}
编辑:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .green
let myLittleView = MyLittleViewController()
myLittleView.willMove(toParent: self)
myLittleView.view.backgroundColor = .red
view.addSubview(myLittleView.view)
// enable auto-sizing (for example, if the device is rotated)
myLittleView.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addChild(myLittleView)
myLittleView.didMove(toParent: self)
myLittleView.view.center = view.center
}
}
class MyLittleViewController: UIViewController {
override func loadView() {
view = UIView()
view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
}
}
设置视图控制器框架的另一种方法是重写方法loadView(),并按如下方式设置视图框架
func loadView() {
view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
}
谢谢,有没有办法在MyLittleViewController类中设置框架?谢谢,现在它可以工作了,以前由于myLittleView.view.TranslatesAutoResizezingMaskintoConstraints=false而无法工作,但是我不知道为什么当您以编程方式设置约束时会使用
myLittleView.view.TranslatesAutoResizezingMacSkintoConstraints=false
,但是当我以编程方式设置约束时,我仍然不能使用myLittleView.view.TranslatesAutoResizezingMacSkintoConstraints=false
,但约束有效。不幸的是,它不起作用:(,当它运行时,它会给我一个错误:线程1:EXC_BAD_ACCESS(代码=2,地址=0x16b697ee0)。@edoardocal您需要创建一个新的view@Sh_Khan我试图使用:override func loadView(){view=UIView(frame:UIScreen.main.bounds)}@Sh_Khan不,它没有:(,它不显示视图。是的,我尝试使用您的代码,但视图未显示。