自动调整大小+变换旋转==>什么是使它工作的最优雅的解决方案?

时间:2017-04-24 10:36:40

标签: ios objective-c swift autoresize

嗨其他软件工程师,我需要很大的帮助:) 在此先感谢您的帮助!

以下是我的问题:

包含在VIEW A中的视图B

VIEW B已自动调整所有选项([.flexibleWidth, .flexibleHeight, .flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin, .flexibleBottomMargin]),因为如果VIEW A的高度发生变化,我希望VIEW B使用VIEW A调整大小。

enter image description here enter image description here

到目前为止它的工作原理... VIEW B被正确移动和调整大小但是当我在VIEW B上应用了变换旋转时,我尝试了相同的VIEW A高度变化。

以下是发生的事情:

enter image description here enter image description here

我建议在更改其大小时手动设置VIEW A中每个视图的帧。但我发现它非常“ Mc Gyverish ”,考虑到VIEW A可以包含很多像VIEW B这样的观点

2 个答案:

答案 0 :(得分:0)

autoresizingMask的预期行为。使用Autolayout解决此问题。这种更常见的方式可以完全适用于您描述的常见情况。

AutolayoutautoresizingMask也不相同。

约束:

enter image description here

答案 1 :(得分:0)

使用autolayout并完全调整大小。 以下是您可以尝试的方法。

第1步: 做自动布局。 (取决于您的红色视图的位置.Mine是正确和顶部约束)

第2步: 做自动修复。

右键单击红色视图并将光标放到主视图中,然后选择相等宽度和相等高度。 enter image description here

并通过放置乘数从属性检查器更改大小。 enter image description here

我已经改变了我的redView的宽度,宽高比值为0.6。

使用这种技术,redView可以根据设备大小轻松调整。

如果您想使用约束更改进行动画处理,请添加 始终使用

[self.view layoutIfNeeded]; 

就像这样

-(void)rotate {
    [self.view layoutIfNeeded];
    [UIView animateWithDuration:0.3 animations:^{
        self.redView.transform = CGAffineTransformMakeRotation(M_PI_2);
        [self.view layoutIfNeeded];

    }];
    self.redView.transform = CGAffineTransformIdentity;
}

有一些有用的堆栈答案为什么我们需要这个。如果你想知道原因,可以谷歌吧。 :)