我正在尝试将滑动照片库功能添加到视图的顶部。
为了给出上下文,用户点击按钮或行或其他东西。然后我加载一个带有 uistackview 的滚动视图。垂直组织,我有一个图像,然后是另一个堆栈视图,其中包含一些文本。现在,我希望该图像成为更大的“画廊”的一部分。我的研究告诉我实现 UIPageviewcontroller 并将其他图像添加到 childVC。
我将此用作教程(第一个示例):http ://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift
我的应用程序与教程的唯一相关偏差是它以编程方式创建事物。
通过我对画廊功能的概念证明,我想将它与前面提到的堆栈视图集成。我的计划是首先将 pageviewcontroller 的东西添加到整个堆栈视图中,原始图像视图就在它的正下方,然后简单地删除原始图像视图,让我得到最终产品。
我能够将 pageviewcontroller.view 添加到 stackview,但画廊没有显示。看看 UI Inspector,我可以看到画廊有点加载,但它搞砸了。
就好像 uiview 有一个高度为 0 的框架,因此其他堆栈视图项不尊重 pageviewcontroller 试图显示的图像。
我认为可能是堆栈视图只能处理特定视图,而不是像 pageviewcontrollers 这样复杂的东西。
另请注意:我的实现都是程序化的,没有故事板,所以没有 xib。所以也许我在这里错过了一些东西。
这是一些代码,如果有帮助的话:
请注意,您看到的约束功能来自“制图”窗格
这会将“画廊”添加到堆栈视图中,从我的角度来看,它是一个委托函数
func addZoomStuff(sender: UIStackView) {
let zoomer = PageBaseViewController()
addChildViewController(zoomer)
zoomer.view.translatesAutoresizingMaskIntoConstraints = false
zoomer.view.tag = 5
sender.addArrangedSubview(zoomer.view)
zoomer.didMoveToParentViewController(self)
}
这就是为画廊项目创建滚动视图、图像视图等的原因:
override func viewDidLoad() {
super.viewDidLoad()
//MARK: - Zoom View Elements
// prep
scrollView = UIScrollView(frame: self.view.frame)
scrollView.delegate = self
self.view.addSubview(scrollView)
constrain(scrollView, view) { view, view2 in
view.edges == view2.edges
}
self.view.setNeedsUpdateConstraints()
// 1
let image = UIImage(named: imageName)!
imageView = UIImageView(image: image)
// 2
scrollView.addSubview(imageView)
constrain(imageView){ view in
view.edges == view.superview!.edges
}
scrollView.contentSize = image.size
我尝试添加这样的约束,但没有效果
func addZoomStuff(发件人:UIStackView){
let zoomer = PageBaseViewController()
addChildViewController(zoomer)
view.addSubview(zoomer.view)
constrain(zoomer.view, view) { view, view2 in
view.width == view2.width
view.height == view2.height * 2 / 3
view.leading == view2.leading
view.top == view2.top
}
zoomer.view.setNeedsUpdateConstraints()
zoomer.view.removeFromSuperview()
zoomer.view.translatesAutoresizingMaskIntoConstraints = false
zoomer.view.tag = 5
print("sender.subviews: \(sender.subviews)")
sender.addArrangedSubview(zoomer.view)
zoomer.didMoveToParentViewController(self)
print("sender.subviews: \(sender.subviews)")
}
如果这种方法不起作用,我可以做一个嵌套的水平堆栈视图而不是 pageviewcontroller 并以某种方式获得相同的滚动/捕捉效果,以便一次在图像视图上看到?