我有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)
}
答案 0 :(得分:0)
"您不应该在viewDidLoad
中初始化与UI几何相关的内容,因为此时未设置视图的几何结构且结果将无法预测"
" viewWillAppear
:这是完成这些事情的正确位置,此时几何体已设置,因此获取和设置与几何相关的属性是有意义的。"
或者您可以在viewDidLayoutSubviews
尝试在viewWillAppear
或viewDidLayoutSubviews
参考:Why am I having to manually set my view's frame in viewDidLoad?