我有 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)
}
最佳答案
“你不应该在 viewDidLoad
中初始化 UI 几何相关的东西,因为此时你的 View 的几何还没有设置,结果将不可预测”
“viewWillAppear
:是执行这些操作的正确位置,此时几何已设置,因此获取和设置与几何相关的属性很有意义。”
或者你可以在viewDidLayoutSubviews
中设置它们
尝试将设置 View 框架的代码放在viewWillAppear
或viewDidLayoutSubviews
引用:Why am I having to manually set my view's frame in viewDidLoad?
关于ios - 在 ScrollView 中加载的 View 大小不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34473518/