【问题标题】:Views that are loaded in scroll view not sizing correctly在滚动视图中加载的视图大小不正确
【发布时间】:2015-12-26 17:21:28
【问题描述】:

我将 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的结果:

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    “你不应该在viewDidLoad初始化UI几何相关的东西,因为你的视图的几何此时没有设置,结果会不可预知”

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

    或者您可以将它们设置在viewDidLayoutSubviews

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

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

    【讨论】:

    • 我将我将框架设置为 screenSize 的代码移动到 viewWillAppearviewDidLayoutSubviews 但它并没有改变结果。我什至把所有的 viewDidLoad 代码都移到了那里,没有任何改变。
    • 请尝试更改背景颜色进行调试。我看不到什么视图?
    • 你是说我拍的绿色快照?那是视图背景,左右其他两个视图颜色不同。
    • "如何使子视图匹配视图的框架(全屏)?"我的意思是,您可以尝试更改friendsFeedVC 的背景以查看它的实际位置。并尝试在viewDidLayoutSubviews 中更改其框架,例如更改为(100,100,100,100),...调试setFrame 是否工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2013-04-16
    • 2016-05-22
    相关资源
    最近更新 更多