如何添加视图(以及缩小或拉伸其他)iOS

Posted

技术标签:

【中文标题】如何添加视图(以及缩小或拉伸其他)iOS【英文标题】:How to add view (and shrink or stretch other) iOS 【发布时间】:2014-03-25 11:16:24 【问题描述】:

我应该弹出一个视图,并从底部开始动画

这个视图(如下图所示)应该隐藏并弹出。(屏幕 5->6 隐藏)(屏幕 6->5 弹出)。

可以看到UIWebView(带文字的view是UIWebView),需要适当的收缩和拉伸。

我想知道这样做的正确方法是什么。我应该创建 320pt x 0pt 视图(因为它没有高度而将被隐藏),然后为它的“高度”属性设置动画,并更新高度约束?或者我应该采取不同的方法?

我使用故事板系统。

非常感谢您的时间和回答

【问题讨论】:

动画高度是一个很好的解决方案。 @tarmes 1. 在情节提要中设计视图(如在第 5 个屏幕中) 2. 使视图高度为 0pt。 3. 动画这个视图的高度属性? 【参考方案1】:

1) 像视图 5 一样设计您的屏幕。

2) 使用弹出视图的“打开”高度设置约束。上面视图的底部需要连接到弹出视图的顶部,并且该顶部视图显然不应该有固定的高度。

3) 为高度约束创建一个出口

4) 在 windowDidLoad 中,通过从约束中获取“打开”高度来存储它(这样您就不必在代码中单独维护它)。例如(其中 _popUpHeight 是 CGFloat 成员变量):

- (void)viewDidLoad

    _popUpHeight = _popUpHeightConstraint.constant; 

5) 在需要时为约束设置动画。像这样的:

- (IBAction)togglePopup:(id)sender 

    [UIView animateWithDuration:5
         animations:^
                      _addBannerDistanceFromBottomConstraint.constant = (_popupState) ? 0 : _popUpHeight;
                 ];

    _popupState = !_popupState;

【讨论】:

你的意思是“viewDidLoad”? NSAnimationContext 仅在 Mac OS 上可用...我认为。 哎呀——我刚刚从我当前的项目中抓取了一大块代码,没有考虑。我已经更新了答案 还有一个问题:你需要添加“[self.view layoutIfNeeded];”到动画结束,如果你动画约束。我不知道为什么。【参考方案2】:

试试这个代码:

[UIView animateWithDuration:duration
                       delay:delay
                    options:UIViewAnimationOptionCurveEaseInOut
                 animations:^(void) 
                     viewToChange.frame = CGRectMake(x, y, width, height);
                 
                 completion:NULL];

你需要一个 viewToChange 的出口。

【讨论】:

当然——但是放弃自动布局是一个很大的代价,因为它已经成熟了。

以上是关于如何添加视图(以及缩小或拉伸其他)iOS的主要内容,如果未能解决你的问题,请参考以下文章

如何获取已被约束拉伸的视图的高度? - iOS

如何跳过最顶层视图的手势 - iOS

在图像上捏合时拉伸和缩小图像

将视图添加到将拉伸以填充可用宽度的滚动视图

iOS 视图向下或向上

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]