iOS逻辑 - 使用适当的坐标以编程方式添加顺序子视图

时间:2014-02-03 23:19:31

标签: ios xamarin

ORIGINAL TITLE:iOS逻辑 - 在Xamarin中添加带有子元素的视图

我不完全确定如何说出这个问题所以我会尽我所能。

您知道像Groupon这样的应用如何列出其优惠吗?或者Facebook应用程序如何在minifeed中动态生成部分 - 包含子元素的方块,例如配置文件图像视图,名称,帖子内容等。这背后的逻辑是什么?

我尝试过在设计器中放置内容视图并在此内容视图部分中布置我想要的元素,然后使用设计器中的视图中的子元素以编程方式重新创建内容视图。这是正确的方法吗?有人可以启发我实现这一目标的标准逻辑吗?

编辑:

我发现我真正想要问的是:以编程方式构建子视图(包含图像,标签,文本字段等的子视图)的最佳方法是什么,然后动态添加副本它 - 一个低于下一个 - 滚动视图。

2 个答案:

答案 0 :(得分:0)

所以我想出了我想要做的事情,添加一个接一个的视图。通过在设计器中创建元素并从中获取坐标,我想出了元素应该在视图中的位置。我创建了一个自定义的UIView类:

public class FestivalSquareView : UIView
{
    public UIImageView festivalImage { get; set; }
    public UILabel nameLabel { get; set; }
    public UILabel locationLabel { get; set; }
    public UILabel dateLabel { get; set; }
    public UITextView descriptionText { get; set; }

    public static int HEIGHT = 270;

    public FestivalSquareView ()
    {

    }
    public FestivalSquareView (string image, string name, string location,
                               string date, string description)
    {
        setImage (image);
        setName (name);
        setLocation (location);
        setDate (date);
        setDescription (description);
    }
    public void setImage(string imageLoc)
    {
        festivalImage = new UIImageView (new RectangleF (0, 0, 320, 177));

        festivalImage.Image = UIImage.FromFile (imageLoc);
    }
    public void setName(string name)
    {

        nameLabel = new UILabel(new RectangleF(20,129,150,21));
        nameLabel.Text = name;  
        nameLabel.Font = UIFont.FromName("Helvetica", 15f);
        nameLabel.TextColor = UIColor.White;    

    }
    public void setLocation(string location)
    {
        locationLabel = new UILabel(new RectangleF(20,148,100,21));
        locationLabel.Text = location;  
        locationLabel.Font = UIFont.FromName("Helvetica", 13f);
        locationLabel.TextColor = UIColor.White;    
    }  
    public void setDate(string date)
    {
        dateLabel = new UILabel (new RectangleF (195, 148, 105, 21));
        dateLabel.Text = date;
        dateLabel.TextColor = UIColor.White;
        dateLabel.Font = UIFont.FromName("Helvetica", 13f);
        dateLabel.TextAlignment = UITextAlignment.Right;
    }
    public void setDescription(string description)
    {
        descriptionText = new UITextView (new RectangleF (20, 185, 280, 75));
        descriptionText.Text = description;
    }
    public void buildView(float y)
    {

        this.Frame = new RectangleF (0, y, 320, 270);

        this.AddSubview (festivalImage);
        this.AddSubview (nameLabel);
        this.AddSubview (locationLabel);
        this.AddSubview (dateLabel);
        this.AddSubview (descriptionText);
    }


}

我使用设计器将滚动视图放入我的ViewController,连接它,在上面构建我的自定义UIView,在buildView中设置Y cooardinate,并将其添加到scrollview

然后我使用

计算下一个Y坐标
next.buildView (prev.Frame.Y + prev.Frame.Size.Height);
festivalScrollView.AddSubView(next);

答案 1 :(得分:0)

您可能应该使用UITableView和/或UICollectionView来托管视图。