iOS网格,用于XAML\AXML开发人员的面板。

iOS网格,用于XAML\AXML开发人员的面板。,ios,xamarin.ios,ios-autolayout,Ios,Xamarin.ios,Ios Autolayout,我正在尝试布局下面的屏幕。这是一个相对简单的布局,我可以轻松地使用Android的axml或Windows的XAML。但是在iOS中,我不知道从哪里开始 iOS缺少StackPanel、LinearLayout和等效的静态网格。它有表,但它们要么是动态的,要么就我所知,每个屏幕只有一个静态表 用红色突出显示的区域在XAML中是一个简单的两列网格,在iOS中该如何做 绿色突出显示的区域包含红色区域,在XAML中为StackPanel,在Android中为LinearLayout。再说一遍,在iO

我正在尝试布局下面的屏幕。这是一个相对简单的布局,我可以轻松地使用Android的axml或Windows的XAML。但是在iOS中,我不知道从哪里开始

iOS缺少StackPanel、LinearLayout和等效的静态网格。它有表,但它们要么是动态的,要么就我所知,每个屏幕只有一个静态表

用红色突出显示的区域在XAML中是一个简单的两列网格,在iOS中该如何做

绿色突出显示的区域包含红色区域,在XAML中为StackPanel,在Android中为LinearLayout。再说一遍,在iOS中我该怎么做


FWIW我正在使用Xamarin进行开发,但这个问题不是Xamarin特有的

它取决于您想要得到的复杂程度

最简单的设置是创建作为容器的UIView,然后手动添加标签和文本的所有视图。你必须自己做尺寸调整

如果使用“自动布局”,则仍需要创建所有八个视图,但可以指定视图如何附着和链接在一起的规则

自动布局在考虑UI将与其他表单因素一起使用时可以方便地使用,在这里可以添加规则来扩展它。


您可以在designer上设计单元格,并引用代码中的各种插槽来填充它们。

我知道这个问题已经提出了几个月,但如果有帮助,请查看MarkupKit:

这是一个开源项目,我专门创建它来解决这种类型的用例。它允许您使用类似于XAML或Android的标记构建本机iOS用户界面。基于上面的模型,我建议对根视图和包含LMRowView和LMColumnView组合的单元格使用LMTableView实例。如果您的目标是iOS9及以上版本,还可以使用UIStackView

您可以在此处找到MarkupKit主要功能的介绍:


我使用MarkupKit制作了这个原型。您可以看到以下结果:

我用于生成视图的标记如下所示:

<LMTableView style="groupedTableView">
    <!-- User name -->
    <?sectionHeaderView?>
    <LMRowView layoutMarginTop="6" layoutMarginBottom="6" layoutMarginLeft="12" layoutMarginRight="12" backgroundColor="#0085e1">
        <UILabel text="BOB ADAMS" font="System 13" textColor="#ffffff"/>
    </LMRowView>

    <?sectionBreak?>

    <!-- Next appointment detail -->
    <?sectionHeaderView?>
    <LMRowView layoutMarginTop="6" layoutMarginBottom="6" layoutMarginLeft="12" layoutMarginRight="12" >
        <UILabel text="NEXT APPOINTMENT" font="System 13" textColor="#808080"/>
    </LMRowView>

    <UITableViewCell textLabel.text="11:30 - in 1 hour 55 minutes" textLabel.textColor="#ffffff" textLabel.font="System 13" backgroundColor="#2e5785"/>

    <LMTableViewCell>
        <LMColumnView>
            <LMRowView>
                <UILabel weight="1" text="MCLEAN, Jim" font="System-Bold 18"/>
                <UILabel text="36y" font="System-Bold 18"/>
            </LMRowView>

            <LMColumnView alignToGrid="true">
                <LMRowView>
                    <UILabel text="Born" font="System 13" textColor="#808080"/>
                    <UILabel text="27-Feb-1978"/>
                </LMRowView>

                <LMRowView>
                    <UILabel text="Gender" font="System 13" textColor="#808080"/>
                    <UILabel text="Male"/>
                </LMRowView>

                <LMRowView>
                    <UILabel text="NHS Number" font="System 13" textColor="#808080"/>
                    <UILabel text="111 222 3333"/>
                </LMRowView>

                <LMRowView>
                    <UILabel text="Postcode" font="System 13" textColor="#808080"/>
                    <UILabel text="Z99 9ZZ"/>
                </LMRowView>
            </LMColumnView>
        </LMColumnView>
    </LMTableViewCell>

    <?sectionBreak?>

    <!-- Daily summary -->
    <LMTableViewCell accessoryType="disclosureIndicator">
        <LMRowView>
            <UILabel weight="1" text="Appointments Today"/>
            <UILabel text="3" textColor="#808080"/>
        </LMRowView>
    </LMTableViewCell>

    <LMTableViewCell accessoryType="disclosureIndicator">
        <LMRowView>
            <UILabel weight="1" text="Downloaded"/>
            <UIActivityIndicatorView activityIndicatorViewStyle="gray" animating="true"/>
            <UILabel text="4" textColor="#808080"/>
        </LMRowView>
    </LMTableViewCell>

    <LMTableViewCell accessoryType="disclosureIndicator">
        <LMRowView>
            <UILabel weight="1" text="Appointments Progress"/>
            <UILabel text="1" textColor="#808080"/>
        </LMRowView>
    </LMTableViewCell>
</LMTableView>


我没有包括任何图像,因为我无法访问您在样机中使用的资产。但是,它们很容易添加。

您尝试过Xamarin.Forms吗?它允许您使用Xaml创建UI,您似乎已经习惯了。X.F很棒,但是。。。在我看来,虽然对于简单的应用程序来说非常优秀,对于原型来说也非常完美。。。Xamarin.Forms还没有准备好为生产应用程序生成复杂的UI(或者不是我上次检查的时候——公平地说是在不久前)。@MemeDeveloper我不知道,但我很想知道。Xamarin是否支持任何类型的Objective-C互操作?如果是这样的话,它很有可能奏效。我想了解的两件事是:a)C中声明的属性是否符合KVC,b)C方法如何映射到Objective-C选择器。这将对outlets产生影响,并且操作映射到控制器类成员。@看起来像MemedDeveloper,所以至少outlets应该可以工作。即使操作不受支持,您仍然可以使用outlets连接您的事件处理程序。感谢您的帮助,我们将尝试尝试尝试一下。谢谢