以编程方式更改 Frame 位置

Posted

技术标签:

【中文标题】以编程方式更改 Frame 位置【英文标题】:Programmatically change a Frame position 【发布时间】:2014-07-16 14:57:31 【问题描述】:

我以编程方式创建了一个视图、一个 UIImageView 和一个按钮。问题是如果设备从纵向切换到横向,我需要更新它们的位置,我该怎么做?

这应该是检查设备是处于纵向还是横向模式的代码

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
    


    
    else
    


    

【问题讨论】:

【参考方案1】:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)
    
//change the frame for sideways direction
btn.frame=CGRectMake(x,y,width,height);
imgView.frame=CGRectMake(x,y,width,height);
view.frame=CGRectMake(x,y,width,height);
    
else
    
//change the frame for up/down
btn.frame=CGRectMake(x,y,width,height);
imgView.frame=CGRectMake(x,y,width,height);
view.frame=CGRectMake(x,y,width,height);
    
 

【讨论】:

【参考方案2】:

您应该使用[self setFrame:CGRectMake(x, y, width, height)]; 中的代码 在这种情况下,self 将是您的 UIImageView, View or Button 的名称

【讨论】:

【参考方案3】:

通常您应该在这种情况下使用 AutoLayout。 你可以在这里阅读:http://www.raywenderlich.com/50317/beginning-auto-layout-tutorial-in-ios-7-part-1

如果你想要一些特别的东西,你可以使用

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

【讨论】:

我知道我应该使用自动布局,但我必须以编程方式创建 3 个元素,而且我无法在 Interface Builder 中创建它们,无论如何谢谢 :) @user3789527 你可以在代码中添加约束:) NSLayoutConstraint *myConstraint =[NSLayoutConstraint constraintWithItem:mybutton attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:mylabel attribute:NSLayoutAttributeWidth multiplier:5 constant:0]; [superview addConstraint: myConstraint]; 该死的以为我不能以编程方式添加约束!非常感谢,这将为我节省大量编码:P【参考方案4】:

您在 viewWillLayoutSubviews 中执行此操作。 通常,如果您需要做的只是相对于超级视图的边界进行帧更改,则不需要任何方向。

【讨论】:

以上是关于以编程方式更改 Frame 位置的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更改 UIScrollView 的框架(Swift 5)

如何以编程方式更改 NSTableView 高度

UIImageView 不会以编程方式更改尺寸

以编程方式更改 UIImageView 帧大小

设置 button.frame.origin 不会快速更改 scrollView 中的位置

以编程方式位于底部的 UIToolbar