【问题标题】:How to handle autoresizing on UIButton elements which has been created dynamically如何处理动态创建的 UIButton 元素的自动调整大小
【发布时间】:2012-03-26 16:42:13
【问题描述】:

我在视图上动态创建了一些按钮,并根据我的一些 JSON 响应参数决定它们的框架。但是我想在设备(dsimulator)旋转时自动调整它们的大小。我可以在界面构建器上轻松做到这一点,但在动态界面上却无能为力。有人可以帮忙吗? 编辑

这是我的代码片段

if (button.tag==1) {
    button.frame = CGRectMake(30.0f, yPosition, 200.0f, buttonHeight);
}
if (button.tag==2) {
    button.frame = CGRectMake(280.0f, yPosition, 200.0f, buttonHeight);
}
if (button.tag==3) {
    button.frame = CGRectMake(530.0f, yPosition, 200.0f, buttonHeight);
}

使用纵向模式时没有问题,但是当它旋转到横向时,一个大的空白区域会停留在屏幕的右侧。我该如何解决这个问题?(我的意思是,当我旋转时,我希望按钮到达屏幕宽度的中心)

编辑: 我用我的 xib 文件在 Size Inspector(Xcode 4.3) 上玩了自动调整大小,它工作得很好,但无论我做什么,我都无法在旋转后调整动态创建的按钮的大小。我几乎尝试了所有AutoresizingMask enums of UIView,但没有任何变化。有人可以帮忙吗

【问题讨论】:

    标签: objective-c ipad uibutton autoresizingmask


    【解决方案1】:

    您可以通过代码定义旋转设备时的预期行为。

    你可以看看:http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html

    http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/c/tdef/UIViewAutoresizing

    添加时需要设置按钮行为:

    [button setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin]; 
    

    【讨论】:

    • 我没有得到你想要的,但你试过我放在那里的面具吗?如果你想要更复杂的操作,你可以在developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/… 中执行苹果文档中的操作并覆盖 shouldAutorotateToInterfaceOrientation:
    • 我想调整按钮框架的大小。我动态创建这些按钮
    • 好的,但是 autoresizingMask 应该可以在您的代码中使用,您能提供更多信息吗?您的问题应该使用 UIViewAutoresizingFlexibleLeftMargin 来解决,您有一个封装按钮的视图?
    • 我不确定封装,我试过 [button setAutoResazingMask:UIViewAutoresizingFlexibleLeftMargin];但它没有工作
    【解决方案2】:

    您在界面构建器文件中设置的属性是UIViewAutoresizing 属性。

    看看this documentation from Apple on the UIView class(你的按钮是它的子类);查找UIViewAutoresizing 属性。这就是你想要的。

    更新:这是使用此功能的 MKMapView 的 sn-p 代码:

    mainMapView = [[MKMapView alloc] initWithFrame:CGRectMake(20, 239, 280, 122)];
    [mainMapView setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin];
    

    使用UIViewAutoresizingFlexibleTopMargin,当用户接听电话时,地图视图会向下移动 --- 它会固定地图相对于屏幕顶部的位置。

    深入研究文档,您会发现最适合您的情况的自动调整大小遮罩。

    【讨论】:

    • 我已经静态地决定了框架(frame=...),所以无论我使用什么它都不会改变任何东西。你能举一些代码例子吗?
    • 您尝试过 AutoResizingMask 的组合吗?您应该能够以编程方式执行您在 IB 中可以执行的任何操作。
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 2011-09-08
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多