C# - 以编程方式添加未知大小的视图

时间:2015-09-08 05:08:23

标签: uiview xamarin xamarin.ios

我正在尝试以编程方式添加一些视图,根据我的理解,您需要声明视图的大小。

例如:

UITableView table = new UITableView(new CGRect(50, 0, 200, 100));
this.View.AddSubview(table); 

但如果您不知道尺寸怎么办?如果这取决于动态数据怎么办?容器是否会根据需要简单扩展?

我正在尝试构建购物车界面。主要有3个部分:

  1. 包含购物篮标题的TableView(例如“产品名称”,“数量”等)。

  2. 动态尺寸表,其大小取决于其中包含的产品数量。

  3. 购物车下方有一些结帐按钮。

  4. 这是我想看到的一个非常粗略的样本。白色部分是动态区域,它将根据有多少项目而增长。

    enter image description here

    目前我正在做的是为标题设置一个UITableView:

    tableForHeaders = new UITableView(new CGRect(0, 0, screenWidth, 50));
    tableForHeaders.SeparatorStyle = UITableViewCellSeparatorStyle.None;
    tableForHeaders.Source = new UIShoppingCartHeaderTable.TableSource(headerRow);
    this.View.AddSubview(tableForHeaders);
    

    然后我为订单项创建了另一个表(我不会厌倦我的TableSource实现):

    tableForRows = new UITableView(new CGRect(0, 50, screenWidth, this.View.Frame.GetMaxY()));
    tableForRows.SeparatorStyle = UITableViewCellSeparatorStyle.None;
    this.View.AddSubview(tableForRows);
    

    最后,我正在尝试添加按钮:

    btnCheckout = new UIButton(new CGRect(0, 50 + tableForRows.ContentSize.Height, screenWidth, 50))
    {
        BackgroundColor = UIColor.Red
    };
    btnCheckout.SetTitle("Checkout", UIControlState.Normal);
    btnCheckout.SetTitleColor(UIColor.White, UIControlState.Normal);
    
    btnContinue = new UIButton(new CGRect(0, 100 + tableForRows.ContentSize.Height, screenWidth, 50))
    {
        BackgroundColor = UIColor.Red
    };
    btnContinue.SetTitle("Continue", UIControlState.Normal);
    btnContinue.SetTitleColor(UIColor.White, UIControlState.Normal);
    
    this.View.AddSubview(btnCheckout);
    this.View.AddSubview(btnContinue);
    

    我将tableForRows的高度设置为GetMaxY() - 因为我认为这可能是让它尽可能大的最好方法。然后我尝试将按钮的高度设置为ContentSize.Height。再说一次,我确信我做错了,只是不确定如何逻辑地做到这一点。

2 个答案:

答案 0 :(得分:0)

如果您想要在应用中使用完整尺寸的视图,那就像这样

#define SCREEN_WIDTH  [UIScreen mainScreen].bounds.size.width
#define SCREEN_HT     [UIScreen mainScreen].bounds.size.height

tableViewForActivities=[[UITableView alloc]init];
tableViewForActivities.frame=CGRectMake(0, 0, SCREEN_WIDTH,SCREEN_HT);

suppose width=50 hight =50

如果您想要在中心观看,那么通过给出宽度,它将在任何iOS设备中自动调整

view=  [[UIView alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-width)/2, 0,  width, width)];

谢谢

答案 1 :(得分:0)

你可以把它放到

view2 =  [[UIView alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-width)/2, CGRectGetMaxY(view.frame),  width, width)];

我认为这会对你有所帮助