UIView 中断约束的缩放

Posted

技术标签:

【中文标题】UIView 中断约束的缩放【英文标题】:Scaling of UIView break constraint 【发布时间】:2016-03-23 18:09:38 【问题描述】:

如何正确缩放从 xib 加载并具有 UIlabels、UIImageView 等约束的 UIView。

这是我如何缩放它的代码:

[UIView animateWithDuration:aDuration
                      delay:aDelay
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^

                     aCardView.transform = CGAffineTransformMakeScale(aZoom, aZoom);

                  completion:^(BOOL finished) 

                 ];

结果我收到警告,并且 UIImageView 内部缩放不正确

但是当我缩放从 UIViewController 加载的同一个 UIView 时,它运行良好并且没有警告。

以下是我收到的警告:

"<NSAutoresizingMaskLayoutConstraint:0x13aeca670 h=-&- v=-&- FFCardView:0x13af8e840.width == FFCardsCollectionView:0x13700a380.width - 129>",
"<NSLayoutConstraint:0x13705adc0 FFCardsCollectionView:0x13700a380.trailing == UITableView:0x1360a6400.trailing>",
"<NSLayoutConstraint:0x13706bc90 FFCardsCollectionView:0x13700a380.leading == UITableView:0x1360a6400.leading>",
"<NSLayoutConstraint:0x13705c460 H:|-(0)-[UITableView:0x1360a6400]   (Names: '|':UIView:0x135f4dfb0 )>",
"<NSLayoutConstraint:0x13705c4b0 H:[UITableView:0x1360a6400]-(0)-|   (Names: '|':UIView:0x135f4dfb0 )>",
"<NSLayoutConstraint:0x13ade45d0 H:[UIImageView:0x13af0ac90(300)]>",
"<NSLayoutConstraint:0x13af9a0f0 H:|-(0)-[UIImageView:0x13af0ac90]   (Names: '|':FFCardView:0x13af8e840 )>",
"<NSLayoutConstraint:0x13af9a140 H:[UIImageView:0x13af0ac90]-(0)-|   (Names: '|':FFCardView:0x13af8e840 )>",
"<NSLayoutConstraint:0x135fe6f00 'UIView-Encapsulated-Layout-Width' H:[UIView:0x135f4dfb0(375)]>"

【问题讨论】:

UIViewController 中的视图是否与 xib 中的视图具有相同的约束? 是的。它具有相同的约束 警告说明了什么?还有你在哪个 ios 版本上测试它? 更新了带有警告列表的主题。我一直在使用 iOS 9.3 【参考方案1】:

我从您提供的警告中看到的问题是您试图将视图缩放到与约束冲突的大小。例如,您有一个ImageView 和一个300 width,带有前导边距和尾随边距。如果您尝试将视图缩放到宽度小于300 的尺寸,您的约束将会中断,您的布局也会中断。缩放时始终牢记视图具有的约束,因为它们不会随视图缩放。您当然可以在缩放时修改约束,这是另一种解决方案。这真的取决于你的需要。

【讨论】:

我不能在 Interface Builder 中为 UIImageView 设置宽度,因为会有错误。每次想要缩放 UIView 时我都应该调用 [self updateConstrains] 吗? 嗯,上面的警告说你已经在300的Interface Builder中设置了一个宽度。调用 ` [self updateConstrains] ` 无济于事,因为它会更新约束中的更改,但您不会在任何地方更改它们,因此它不会做任何事情。

以上是关于UIView 中断约束的缩放的主要内容,如果未能解决你的问题,请参考以下文章

在缩放时,使用UIWebView scrollView更新UITableViewCell中的约束无法正常工作

在 UIView 内缩放图像而不改变边界?

在方向更改时自动缩放 UIView 以按比例缩放以适合父视图

使用渐变缩放 UIView

如何缩放 UIImage 以适应 UIScrollView 的尺寸?

不使用 UIScrollview 缩放 UIView