我设置了UIScrollView
,其中包含两个ViewController's
。这就是我viewDidLoad
的样子:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
scrollView.delegate = self
self.automaticallyAdjustsScrollViewInsets = false
let allViewController = self.storyboard!.instantiateViewControllerWithIdentifier("All") as! AllViewController;
let favoritesViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Favorites") as! FavoritesViewController;
scrollView!.contentSize = CGSizeMake(2*CGRectGetWidth(allViewController.view.frame), CGRectGetHeight(scrollView!.frame));
let viewControllers = [allViewController, favoritesViewController]
var idx:Int = 0;
for viewController in viewControllers {
addChildViewController(viewController);
let originX:CGFloat = CGFloat(idx) * CGRectGetWidth(scrollView!.frame);
viewController.view.frame = CGRectMake(originX, 0, viewController.view.frame.size.width, viewController.view.frame.size.height);
scrollView!.addSubview(viewController.view)
viewController.didMoveToParentViewController(self)
idx++;
}
在iPhone 6模拟器上一切正常,但是当我在iPhone 5模拟器上运行时,滚动时控制器之间存在间隙:
[]
scrollView的自动布局设置为0,用于前导,尾随,顶部和底部。
答案 0 :(得分:2)
如果您想在viewDidLoad:
中设置来源,并且您肯定知道滚动视图将具有屏幕宽度,请在计算逻辑中使用
CGRectGetWidth(scrollView!.frame)
var bounds = UIScreen.mainScreen().bounds
var width = bounds.size.width
为了在子视图布局之前获得适当的宽度。
<强> UPD:强>
正如这里提到的那样,我取消选中了scrollview的Autoresize Subviews
属性,子类UITableViewCell
并将我的提交推送到github。通过我上面提供的链接检查它。按钮向右对齐的结果如下:
<强>结果:强>
<强>参考:强> 我的答案here
中描述了主要概念答案 1 :(得分:1)
您在视图中设置视图控制器位置是否已加载。此时,视图的尺寸将与故事板中的视图大小相匹配。我假设您正在使用4.7&#34;你的故事板中的视图。这意味着在viewDidLoad中,您将第二个视图控制器的x位置设置为375.在viewWillAppear或didLayoutSubviews中设置视图控制器位置以获得正确的视图宽度(iPhone 5上的320)。注意,这两种方法都可以多次调用,因此可以进行相应的计划。
答案 2 :(得分:1)
如果您的子视图应该始终是滚动视图的大小,那么最简单的解决方案可能是添加UIScrollView的自定义子类,它只是按照添加的顺序布局所有子视图,如下所示:
import UIKit
class MyScrollView: UIScrollView {
override func layoutSubviews() {
super.layoutSubviews()
var idx:Int = 0;
contentSize = CGSizeMake(2*CGRectGetWidth(bounds), CGRectGetHeight(bounds));
for sview in self.subviews as! [UIView] {
let originX:CGFloat = CGFloat(idx) * CGRectGetWidth(bounds);
sview.frame = CGRectMake(originX, 0, CGRectGetWidth(bounds), CGRectGetHeight(bounds));
idx++
}
}
}
然后,您可以将viewDidLoad简化为
override func viewDidLoad() {
super.viewDidLoad()
self.automaticallyAdjustsScrollViewInsets = false
let allViewController = self.storyboard!.instantiateViewControllerWithIdentifier("All") as! AllViewController;
let favoritesViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Favorites") as! FavoritesViewController;
for viewController in [allViewController, favoritesViewController] {
addChildViewController(viewController);
scrollView!.addSubview(viewController.view)
viewController.didMoveToParentViewController(self)
}
}
答案 3 :(得分:0)
在滚动视图中添加两个子视图作为占位符,并在它们和scrollview之间添加约束,并将两个@IBOutlet添加到占位符。
在viewDidLoad中只需设置scrollView大小,添加childViewControlers并将其视图添加到占位符