gpt4 book ai didi

ios - 如何在 iOS 中使用自动布局更改 uiview 的框架?

转载 作者:行者123 更新时间:2023-11-29 02:51:30 26 4
gpt4 key购买 nike

我在 XIB 中添加了 1 个 View ,它设置为自动布局。但是运行时,我想更改该 View 的框架。我知道如果使用自动布局,需要在我的代码中设置 translatesAutoresizingMaskIntoConstraints = YES 。我已经这样做了,我为该 View 创建了新框架,但它在控制台中显示了警告消息:

    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
"<NSIBPrototypingLayoutConstraint:0x16e4b750 'IB auto generated at build time for view with fixed frame' V:|-(0)-[UIView:0x16ed3c30] (Names: '|':UIView:0x16ee06b0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x16e19e30 h=-&- v=-&- UIView:0x16ed3c30.midY == UIView:0x16ee06b0.midY + 44>",
"<NSAutoresizingMaskLayoutConstraint:0x16e19e60 h=-&- v=-&- UIView:0x16ed3c30.height == UIView:0x16ee06b0.height>"
)

Will attempt to recover by breaking constraint
<NSIBPrototypingLayoutConstraint:0x16e4b750 'IB auto generated at build time for view with fixed frame' V:|-(0)-[UIView:0x16ed3c30] (Names: '|':UIView:0x16ee06b0 )>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

这是创建新框架的代码,我只是想让Y的原点等于0。

self.leftView.frame= CGRectMake(0, 0, 40, self.view.frame.size.height);

我该如何修复该错误?请给一些建议。非常感谢。

最佳答案

如果我理解正确的话,我认为你需要在类中使用存储的 NSLayoutConstraint 变量,然后将约束的常量值更新为 0 以使 UIView 滑动到顶部。

此外,当您使用自动版式时,您通常会设置:

myView.translateAutoResizingMaskIntoConstraint = NO;

那是NO而不是YES。

所以一个例子是这样的:

@interface MyViewController()
{
NSLayoutConstraint *myViewTopConstraint;
}

@end

@implementation MyViewController

-(void)setupMyConstraintsMethod
{
...

// ---------------------------------------------------------------
// This constraint here says "myView" top edge should be pinned
// to the top edge of the view controller's view but with an offset
// of 50 pixels.
// ---------------------------------------------------------------
NSLayoutConstraint *myViewTopConstraint = [NSLayoutConstraint constraintWithItem:self.myView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:50.0];

[self.view addConstraint:myViewTopConstraint];
}

-(void)buttonPressed:(id)sender
{
// ------------------------------------------------------------
// now you want myView's top edge to be at the top of your
// view controller's view, so you set the constant to 0
// ------------------------------------------------------------
myViewTopConstraint.constant = 0;

// animates the sliding up of "myView"
[UIView animateWithDuration:0.5 animations:^{
[self.view layoutIfNeeded];
}];
}

@end

关于ios - 如何在 iOS 中使用自动布局更改 uiview 的框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24446932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com