使用启用自动布局的故事板时,UIView未正确定位

时间:2016-11-14 08:25:32

标签: ios objective-c uiview autolayout

我有一个视图控制器,哪个视图(.view属性),我正在访问并更改它的框架以使用第三方库(名为KLCPopup)显示该视图。这很好。

但问题是,如果我在故事板中添加一个UIButton,它总是位于顶部中心位置。所以我将它从故事板中删除并尝试以编程方式添加它,但它仍然没有出现在适当的位置。

_btnFavourite = [UIButton buttonWithType:UIButtonTypeCustom];
_btnFavourite.translatesAutoresizingMaskIntoConstraints = NO;
[_btnFavourite setImage:[UIImage imageNamed:@"favorite-not-sel"] forState:UIControlStateNormal];
[_btnFavourite setImage:[UIImage imageNamed:@"favorite-sel"] forState:UIControlStateSelected];
_btnFavourite.frame = CGRectMake((self.view.frame.size.width - (lmargin * 2.0f))/2.0f, (self.view.frame.size.height - (tmargin * 2.0f))/2.0f, 50.0f, 50.0f);
[_btnFavourite setBackgroundColor:UIColor.redColor];
[self.view addSubview:_btnFavourite];

我正在尝试将按钮框设置在我想要的位置。但它总是被添加到不同的地方。

2 个答案:

答案 0 :(得分:0)

当您使用自动布局时,不要永远修改帧。因此,您的.view.frame不应被修改。

此外,在添加UIButton(或任何可视元素)时,不应以编程方式设置其框架,而应以编程方式添加新约束。这样你就可以让iOS处理所有内容,并且它也会在不同的手机/方向上自行调整大小! (.frame无法处理)

现在关于你的问题,我无法告诉你究竟应该添加什么作为约束,因为我不知道你想要按钮的位置。但是,尽可能多地学习NSLayoutConstraint和阅读教程是我强烈建议的。它不会丢失知识,而且很多次会派上用场。

如果您添加有关当前视图的更多信息(屏幕截图,您想要的内容,您拥有的内容等)和按钮(它应该在哪里),我会告诉您要添加的约束。如果你尝试了一个小时或者其他什么并且回来了解决方案(我很乐意在这里添加)或者你最好的结果,那将是一个很好的练习,我将从那里引导你。如果我没有给你答案,你会得到更多。

答案 1 :(得分:0)

首先,不要在viewDidLoad上修改任何视图的帧(可以创建,可以添加,只是不修改帧),此时,视图没有布局并导致错误的帧,而是移动它到viewDidLayoutSubViewviewWillAppear

其次,如果视图已经在带有约束的故事板中创建,只需将约束拖动为属性并更改它然后调用layoutIfNeeded,不要更改框架