2013-03-26 72 views
6

我已经阅读了iOS6发行说明和一些Autolayout + UIScrollview的相关主题,但我有一个奇怪的错误,我不知道该如何解决。Autolayout UIScrollView约束奇怪的行为

视图的层次是:

- View 
-- UIScrollView 
---- UIImageView 
---- UILabel 

我添加元素在通过界面生成器的视图,其中自动布局ON并保持默认约束。

我的标签有一个动态文本,其高度是可消耗的(IB中配置的行数= 0)。 我希望滚动视图自动适应图像视图+标签的高度。

下面是相关的视图控制器类代码:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.scrollView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.imageView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.label.translatesAutoresizingMaskIntoConstraints = NO; 

    self.imageView.image = [UIImage imageNamed:@"image.png"]; 

    self.label.text = @"Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text END"; 
    [self.label sizeToFit]; 

    NSDictionary *viewsDictionnary = NSDictionaryOfVariableBindings(scrollView, imageView, label); 
    [self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]-20-[label]-10-|" options:0 metrics:0 views:viewsDictionnary]]; 

    self.imageView.userInteractionEnabled = YES; 
    [self.imageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)]]; 
} 

- (void)tap 
{ 
    [self.navigationController pushViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"View2"] animated:YES]; 
} 

正如你所看到的,我加入了滚动视图垂直约束。这似乎工作得很好,但我在控制台以下消息:

2013年3月26日16:24:49.072试验[34704:11303]无法同时满足 约束。 以下列表中的至少一个约束可能是您不想要的。试试这个:(1)看看每个约束条件,并试图找出你不期望的; (2)找到 添加不需要的约束或约束并修复它的代码。 (注意:如果你看到你 不懂NSAutoresizingMaskLayoutConstraints,请参阅文档UIView的财产 translatesAutoresizingMaskIntoConstraints)( “”, “”)

将尝试打破约束 恢复

而现在的具体错误: 如果我滚动下来,然后我点击图片进入第二视图,单击返回,返回到当前视图,滚动视图将从开始先例的位置,因为它是v的顶部IEW。而且我将无法滚动查看视图。

我很抱歉,我没有足够的信誉发表图片,但你可以在这里下载示例项目重现bug:https://docs.google.com/file/d/0B-sCDWMvn-KGS19sUkZnUFdWWTg/edit?usp=sharing

感谢您的帮助, 卢卡斯

编辑 此处的bug的解决方法:UIScrollView wrong offset with Auto Layout

回答

1

根据控制台中的消息。来自xib的垂直约束与您在代码中添加的约束冲突。如果你只是想改变imageViewlabel之间的垂直空间,那么在xib中执行它。

关于你的错误。这里是解决方案tap here

+0

谢谢,这与您给出的链接中描述的错误相同。在那里提供解决方法。 – lukas 2013-03-30 00:07:58