1

我想在单击按钮时展开视图并折叠它。并相应地更改位于视图下方的数据框架。我使用了滚动视图,然后添加了要滚动的项目。

在此处输入图像描述

在此处输入图像描述

我可以添加一个新视图并最初将其隐藏,然后单击(+)按钮我取消隐藏该视图,并隐藏(+)按钮。

两个担忧

1)我如何管理视图下方的数据,以便当视图处于折叠位置时,数据应该就在视图下方?当我展开它时,它应该相应地改变框架。
2)标签“标签是test1”是单个标签。我会在那里显示描述。最初是 4 行,当我们单击 (+) 按钮时,将显示剩余的描述。因此,如果我采用另一个视图,这是不可能的,因为我需要采用单个标签或文本视图来显示数据。

-(IBAction)plusButton:(id)sender{

    [plusButton setHidden:YES];
    [expandedView setHidden:NO];

    //[mainView setFrame:CGRectMake(10, 150, 294, 400)];

}

-(IBAction)minusButton:(id)sender{
    [plusButton setHidden:NO];
    [expandedView setHidden:YES];

}
4

3 回答 3

1

在我看来,这是一个自动调整大小的问题。您需要将标签和文本字段的自动调整大小设置为

UIViewAutoresizingFlexibleHeight 和 UIViewAutoresizingFlexibleTopMargin

我建议您将这些标签和文本字段放在具有相同自动调整大小属性的“内容”视图中,并将其添加为子视图。

编辑:(添加示例)

UIView *contentView = [[UIView alloc] initWithFrame:frame]; //contentView's initail frame.
UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:contentView.bounds]; //in this example the label takes the whole frame of the contentView, you can change it to be smaller in height if it suits you purpose.

descriptionLabel.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin;
contentView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin;

点击“+”按钮:

[UIView animateWithDuration:0.2f animations:^{
    CGRect rect = contentView.frame;
    rect.size.height = 200;
    contentView.frame = rect;
}];

点击“-”按钮:

[UIView animateWithDuration:0.2f animations:^{
    CGRect rect = contentView.frame;
    rect.size.height = 100;
    contentView.frame = rect;
}];
于 2013-07-19T05:16:13.630 回答
0

您可以使用这样的动画块为屏幕内外的视图设置动画,这是我的一个应用程序在视图内移动视图导致从底部效果向上滑动的示例。

  -(void) showFxAnimation {

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.65];
     [self.sliderFxSubView setFrame:CGRectMake(0.0f, [UIScreen mainScreen].bounds.size.height - 150,320.0f , 150.0f)];
    [UIView commitAnimations];    
}


-(void) hideFxAnimation {

    [UIView animateWithDuration:1.0 animations:^{

        [self.sliderFxSubView setFrame:CGRectMake(0.0f, 1200.0f, 320.0f, 150.0f)];

    }];

}
于 2013-07-19T05:14:07.730 回答
0

使用类似的动画

无论是 UIView 还是 UIlabel 都使用它们中的任何一个..

将 containerView 插座连接到联系人信息标签或视图。和底部视图出口标签包含“lorel ipsum ...”

//on plus button click

IBOutlet UILabel *containerView;
IBOutlet UILabel *bottomView;

CGRect rect=containerView.frame;
rect.size.height=400;

CGRect rect2=bottomView.frame;
rect2.origin.y=420;

[UIView animateWithDuration:0.3 animations:^{
   [containerView setFrame:rect];
    [bottomView setFrame:rect2];
}];


//on minus button click


CGRect rect=containerView.frame;
rect.size.height=300;

CGRect rect2=bottomView.frame;
rect2.origin.y=320;

[UIView animateWithDuration:0.3 animations:^{
    [containerView setFrame:rect];
    [bottomView setFrame:rect2];
}];
于 2013-07-19T05:21:07.180 回答