滚动视图中加载的视图未正确调整大小

时间:2015-12-26 17:21:29

标签: ios swift

我有3个视图,我正在加载到滚动视图中,因此用户可以在应用程序中滑动以更改视图(类似于Snapchat或Tinder导航)。但是,我在其中一个笔尖上添加了一个水平和垂直居中的标签,看起来好像它的尺寸比我的屏幕宽得多。我将笔尖框架设置为设备屏幕的大小。

如何让子视图与视图框架(全屏)匹配?

这是我在viewDidLoad中为视图控制器提供的全屏滚动视图,以及结果的屏幕截图:

@IBOutlet weak var scrollViewOfViews: UIScrollView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    let settingsVC = UIViewController(nibName: "SettingsViewController", bundle: nil)
    let friendsFeedVC = UIViewController(nibName: "FriendsFeedViewController", bundle: nil)
    let notificationsVC = UIViewController(nibName: "NotificationsViewController", bundle: nil)

    let screenSize = UIScreen.mainScreen().bounds
    settingsVC.view.frame = screenSize
    friendsFeedVC.view.frame = screenSize
    notificationsVC.view.frame = screenSize

    self.addChildViewController(settingsVC)
    self.scrollViewOfViews.addSubview(settingsVC.view)
    settingsVC.didMoveToParentViewController(self)

    self.addChildViewController(friendsFeedVC)
    self.scrollViewOfViews.addSubview(friendsFeedVC.view)
    friendsFeedVC.didMoveToParentViewController(self)

    self.addChildViewController(notificationsVC)
    self.scrollViewOfViews.addSubview(notificationsVC.view)
    notificationsVC.didMoveToParentViewController(self)

    var friendsFeedFrame = friendsFeedVC.view.frame
    friendsFeedFrame.origin.x = self.view.frame.width
    friendsFeedVC.view.frame = friendsFeedFrame

    var notificationsFrame = notificationsVC.view.frame
    notificationsFrame.origin.x = self.view.frame.width * 2
    notificationsVC.view.frame = notificationsFrame

    self.scrollViewOfViews.contentSize = CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)

    // start scrollview page on middle view
    var startFrame = scrollViewOfViews.frame
    startFrame.origin.x = self.view.frame.width
    startFrame.origin.y = 0
    scrollViewOfViews.scrollRectToVisible(startFrame, animated: false)

}

带有居中标签的friendsFeedVC的结果: enter image description here

1 个答案:

答案 0 :(得分:0)

"您不应该在viewDidLoad中初始化与UI几何相关的内容,因为此时未设置视图的几何结构且结果将无法预测"

" viewWillAppear:这是完成这些事情的正确位置,此时几何体已设置,因此获取和设置与几何相关的属性是有意义的。"

或者您可以在viewDidLayoutSubviews

中设置它们

尝试在viewWillAppearviewDidLayoutSubviews

中放置设置视图框的代码

参考:Why am I having to manually set my view's frame in viewDidLoad?