没有硬编码位置的动态按钮布局

时间:2009-07-13 21:38:31

标签: iphone objective-c cocoa-touch layout uiview

我想实现一个视图(它实际上将进入UITableView的页脚),它实现了1-3个按钮。我希望这些按钮的布局(以及按钮本身的大小)根据显示的内容而改变。当您查看特定联系人时,“联系人”应用程序中“信息”屏幕底部的几乎所有行为的示例(“添加到收藏夹”在单击时消失,其他按钮展开以占用一个漂亮的动画中的可用空间。)

当我正在经历不同的布局场景时,我很难对所有这些值进行编码,我只是想......“这不是我应该这样做的方式。”

甚至可以看出Interface Builder在标尺选项卡中有一些可以为我做这些功能的功能,但是如果我能在手机上弄清楚它们是如何工作的(如果它们有效的话),我会很高兴。

有没有人有任何建议或在线教程,我可以看一下指向正确的方向?

非常感谢。

2 个答案:

答案 0 :(得分:0)

你可以看看 Stanford cs193p classes

我认为其中一个课程/示例中有一个演示,其中他们编程设置按钮的自动调整以及其他一些设置为视图设置动画的地方。 你也可以动态地将视图集的每个子视图的宽度设置为(ownWidth / numberofSubView),每个元素的位置都相同。

那样的[编辑]?它还没有“动态”,但你有了这个主意 你可以在“添加/删除”按钮时增加/减少numberOfbuttons然后重置所有子视图的新框架

- (void)loadView
{

UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
view.backgroundColor = [UIColor lightGrayColor];
view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

int numberOfbuttons = 2;
CGFloat buttonsLegth = (-20+view.bounds.size.width)/numberOfbuttons-20;
for(int i=0;i<numberOfbuttons;i++){
    CGRect buttonFrame = CGRectMake(0, 0, buttonsLegth, 37);
    buttonFrame.origin.x = (buttonFrame.size.width+20)*i + 20.0;
    buttonFrame.origin.y =  20.0;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // Autoreleased
    button.frame = buttonFrame;
    [button setTitle:@"Done" forState:UIControlStateNormal];
    [view addSubview:button];
    }
self.view = view;
[view release];
}

答案 1 :(得分:0)

嗨删除视图中的所有按钮并使用此方法再次添加... 你必须传递多个按钮和一个你想要添加这些按钮的UIView

-(void)addButtons:(int)numberOfButtons ToView:(UIView *)containerView;
{
    CGRect containerRect = containerView.frame;

    CGFloat padding = 5.0;
    CGFloat width = (containerRect.size.width - (padding*numberOfButtons+1))/numberOfButtons;
    for (int i = 1; i<=numberOfButtons; i++)
    {
        UIButton * btn = [[[UIButton alloc] initWithFrame:CGRectMake(i*padding+width, 0, width, containerRect.size.height)]autorelease];

        //set Button Properties like Target,backColor,Title,,,,etc  MUST SET TAG TO ACCESS THEM IN CLICK METHOD IF YOU ARE USING SAME SELECTOR FOR ALL BUTTONS.

        [containerView addSubview:btn];
    }

}

试试这个并玩得开心......