ios - 在 ScrollView 中加载的 View 大小不正确

标签 ios swift

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

如何使 subview 匹配 View 的框架(全屏)?

这是我在带有全屏 ScrollView 的 View Controller 的 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

最佳答案

“你不应该在 viewDidLoad 中初始化 UI 几何相关的东西,因为此时你的 View 的几何还没有设置,结果将不可预测”

viewWillAppear:是执行这些操作的正确位置,此时几何已设置,因此获取和设置与几何相关的属性很有意义。”

或者你可以在viewDidLayoutSubviews中设置它们

尝试将设置 View 框架的代码放在viewWillAppearviewDidLayoutSubviews

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

关于ios - 在 ScrollView 中加载的 View 大小不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473518/

相关文章:

ios - 在 Firebase Analytics 控制台中记录自定义事件 (Swift)

ios - 真的需要 bridgeToObjectiveC 吗?

ios - 从商店下载了 Xcode 6.3,但 6.2 仍在启动

ios - 更改调用提示确认的色调

ios - 防止表格 View 单元格中的图像重叠

ios - 初始化子类中的属性?

ios - Firebase Swift 3.0 语法更新?

ios - XCODE 9 和 ionic ios 应用程序构建失败

ios - 在 UITableView 中滚动到 UISearchBar 的顶部

SwiftUI - DragGesture 和 .onDelete 冲突