我有一个 UIScrollView ,其中有一个 UIImageView 。只是一个简单的测试用例:UIImageView 是 ScrollView 的全宽,并通过自动布局以 Y 为中心。然而,在我的设备上的最终结果中,它并不是真正以 Y 为中心。
但是我有一个问题,当使用 ScrollView 缩放 UIImageView 时,它会“漂移”到底部区域 - 而不仅仅是按应有的方式在中心缩放。当缩小时(在视频的最后)它也会“漂移”到左侧并弹回到中心。
我制作了此行为的一个小预览视频:https://www.youtube.com/watch?v=ivRNkzNrcEA
这是我的简单测试代码:
class TestController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var SCROLL: UIScrollView!
@IBOutlet weak var IMAGE: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
SCROLL.minimumZoomScale = 1;
SCROLL.maximumZoomScale = 6.0;
SCROLL.zoomScale = 1.0;
SCROLL.contentSize = IMAGE.frame.size;
SCROLL.delegate = self;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
return IMAGE
}
func scrollViewDidZoom(scrollView: UIScrollView) {
}
func scrollViewDidEndZooming(scrollView: UIScrollView, withView view: UIView?, atScale scale: CGFloat) {
}
}
这是我的测试自动布局:
最佳答案
我不确定是否可以仅通过自动布局保持居中。对我有用的一种方法是对 UIScrollView
进行子类化并修改 layoutSubviews
,如 Apple WWDC 示例所示。代码如下
-(void) layoutSubviews
{
[super layoutSubviews];
UIImageView *v = (UIImageView *)[self.delegate viewForZoomingInScrollView:self];
//Centering code
CGFloat svw = self.bounds.size.width;
CGFloat svh = self.bounds.size.height;
CGFloat vw = v.frame.size.width;
CGFloat vh = v.frame.size.height;
CGRect f = v.frame;
if (svw > vw)
{
f.origin.x = (svw - vw)/2.0;
}
else
{
f.origin.x = 0;
}
if (svh > vh)
{
f.origin.y = (svh - vh)/2.0;
}
else
{
f.origin.y = 0;
}
v.frame = f;
}
关于ios - 在 UIScrollView 中缩放 UIImageView – 不居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230394/