当前位置: 首页 > 知识库问答 >
问题:

移动带有约束的视图

督翰学
2023-03-14

我的视图控制器中有几个视图,当检测到向上滑动时向上移动,然后当检测到向下滑动时向下移动。我使用CGRectOffset通过调整y原点来强制视图移动。我现在使用IB对视图施加了约束,我不确定移动视图的最佳方法是什么,以便它们最终在iPhone 5、6和6上的正确位置。

目前我正在做这样的事情:

[self.view layoutIfNeeded];

    self.panFrameVerticalConstraint.constant = self.panFrameVerticalConstraint.constant +338;

    [UIView animateWithDuration:5
                     animations:^{
                         [self.view layoutIfNeeded];
                     }];

用比值改变常数是否更好?因此,对于上面的约束,不使用338,这样做是否更好:

    self.panFrameVerticalConstraint.constant = self.panFrameVerticalConstraint.constant + (self.panView.frame.size.height/1.680);

    //self.panView.frame.size.height = 568
    //(568/1.680) = 338

共有1个答案

郑燕七
2023-03-14

是的,更改常量时没有问题。这里的问题是,您必须适当地设置约束。

让我们考虑一个例子。

我在Storyboard中有一个UIView,我想更改它的宽度。它的默认宽度是1024

在一些动画之后,我们将其宽度更改为900

遵循以下步骤实现这一点:

    < li >选择我们要在其中更新约束的< code>UIView。这里我们需要更新< code>width,所以我们将为width添加一个约束。

现在,为 NS 布局组件创建一个 IBOutlet 变量,并使用上述宽度约束将其连接起来。

改变宽度常数

雨燕5.0

@IBOutlet weak var viewWidthConstraint : NSLayoutConstraint!

func reduceWidth() {
    // Reduce width of view.
    UIView.animate(withDuration: 0.35, animations: { () -> Void in
        self.viewWidthConstraint.constant = 900
        self.view.layoutIfNeeded()
    })
}

func normalWidth() {
    // Change to the default width of view.
    UIView.animate(withDuration: 0.35, animations: { () -> Void in
        self.viewWidthConstraint.constant = 1024
        self.view.layoutIfNeeded()
    })
}

目标C

@property (weak, nonatomic) IBOutlet NSLayoutConstraint     *viewWidthConstraint; 

- (void) reduceWidth {
    // Reduce width of view.
    [UIView animateWithDuration:0.35f animations:^{
        self.viewWidthConstraint.constant = 900;
        [self.view layoutIfNeeded];
    }];
}

- (void) normalWidth {
    // Change to default width of view.
    [UIView animateWithDuration:0.35f animations:^{
        self.viewWidthConstraint.constant = 1024;
        [self.view layoutIfNeeded];
    }];
}
 类似资料:
  • 最近,我一直被困在“探索网格”的算法上。我想根据网格上可能位于任何位置的起始正方形绘制网格中特定部分内所有有效的移动。我最初的计划是在4个方向上使用递归分割来标记网格,直到它达到边界或移动限制。探索“分支”不能沿对角线移动: *注意:箭头不代表堆栈中的发生,它们用于可视化算法的概念 我知道这种算法在b/c模式下不起作用。我在这里做了一个快速的可运行示例,算法在值之间卡住,直到触发运行时错误。 所以

  • 我有一些动画,我试图转换为约束。它背后的想法是当出现错误时登录提示会反弹。 我的方法是,视图控制器上的所有内容都在bounceView中,而bounceView本身也在主视图中。 BounceView使用居中约束和前导空间约束绑定到主视图。为了使布局在设计时明确无误,还有一个前导空间和顶部空间约束。不过,这些只是占位符,在运行时被等高/宽约束替换。 没有其他约束与主视图相关联。 现在,一些细节…

  • 我的问题很简单,但我在文档中找不到任何信息。 从视图层次中删除视图(或移动到其他视图)时,布局约束会发生什么情况? 例如,让容器具有子视图A和B。容器C包含一些约束。然后我们调用removeFromSuperview。A的约束会发生什么情况? 如果我们再次将A添加到C,会发生什么?

  • 我遇到了内容视图高度限制的问题。所有标签都有动态高度,即没有固定高度。我在某个地方读到将高度设置为等于滚动视图高度。 ViewController的高度目前是870px,scrollview的高度是757px。我不知道如何在AutoLayout中设置高度,因为我无法在某一点后滚动。 我首先设置了UIScrollView,然后添加UIView作为UIScroll View的子级,然后添加了2个UII

  • 在我的人造示例中,我有以下单个视图: 如您所见,它由几个简单的约束组成: 将水平和垂直中心对齐, 高度(设置为常数) 前导空格和尾随空格(设置为常量) 我想要实现的是让这个红色/粉红色的视图从顶部“进来”。传统上,在一个没有约束的世界中,我只需修改,但我不确定在约束世界中如何进行类似操作。 为了重申我的问题,我如何使我的视图从场景开始,并为从顶部飞入的视图设置动画? 我考虑过设置垂直中心约束的动画

  • 这就是古老而著名的背包问题:背包问题 这里我有一个有约束的背包问题。 我有一个大小为W=100000000和N=100项的背包,我为它写了动态解。我的算法复杂度为,这在时间和空间上都太大了,但这里有一个条件,所以如果我的背包大小超过50000,我的项的最大值是有限的。 所以现在我想知道如何用这个条件我认为背包问题取决于背包的大小和物品的数量,那么物品的值如何才能改变我的算法呢?