Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在Xcode脚本中显示具有灵活内容的界面_Ios_Uistoryboard - Fatal编程技术网

Ios 如何在Xcode脚本中显示具有灵活内容的界面

Ios 如何在Xcode脚本中显示具有灵活内容的界面,ios,uistoryboard,Ios,Uistoryboard,我需要在viewcontroller中显示咖啡馆详细信息。Cafe数据来自API调用,每个Cafe可能有不同的数据集 通常,视图将按顺序显示以下内容: 咖啡馆名称 地址 最少2行,最多4行 联系电话 可能为空,最多2组联系人号码 电子邮件 可能是空的 说明(HTML) 链接到社交媒体或网站 可能为空,最多4组URL 地图 我需要的是: 如果数据不是空的,则在视图中显示数据 能够在上一个元素之前设置间距 我使用的是xcode脚本,视图控制器嵌入在导航控制器和选项卡栏控制器中

我需要在viewcontroller中显示咖啡馆详细信息。Cafe数据来自API调用,每个Cafe可能有不同的数据集

通常,视图将按顺序显示以下内容:

  • 咖啡馆名称
  • 地址
    • 最少2行,最多4行
  • 联系电话
    • 可能为空,最多2组联系人号码
  • 电子邮件
    • 可能是空的
  • 说明(HTML)
  • 链接到社交媒体或网站
    • 可能为空,最多4组URL
  • 地图
我需要的是:

  • 如果数据不是空的,则在视图中显示数据
  • 能够在上一个元素之前设置间距
我使用的是xcode脚本,视图控制器嵌入在导航控制器和选项卡栏控制器中


处理灵活/动态界面的推荐方法是什么,有没有我可以遵循的指南或教程?到目前为止,我能找到的所有帮助都是在固定坐标中简单地放置元素。对于我的情况,一些元素大小可能会根据API调用返回的数据而改变。

有几种方法可以做到这一点

有了这么多的数据,我将创建一个表视图,并将每行数据(或相关数据段)放在它们自己的行中,这将为您提供一个自由滚动视图,您肯定需要动态内容

至于确定单元格的高度,可以计算文本将占据的“边界框”的高度,以显示适当的高度。这里有一个例子

+ (CGFloat)heightForText:(NSString *)text {

    CGFloat topMargin = 10.0; // add a bit of padding to top
    CGFloat bottomMargin = 10.0; // add a bit of padding to bottom
    CGFloat minHeight = 44.0;

    NSAttributedString *string = [NSAttributedString attributedStringWithText:text lineHeight:23 font:[UIFont systemFontWithSize:15] color:[UIColor blackColor] alignment:NSTextAlignmentLeft];

    CGRect screenSize = [[UIScreen mainScreen] bounds];
    CGRect size = [string boundingRectWithSize:CGSizeMake(screenSize.size.width - 70, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil];
    return MAX(minHeight, size.size.height + topMargin + bottomMargin);
}
如果您想更清楚,请告诉我


您还可以使用故事板约束,如果操作正确,将为您完美地计算所有内容,但您需要考虑用户可能需要滚动内容这一事实,即您需要滚动视图。

您肯定应该在界面生成器中使用约束。通过约束,可以设置每个控件/视图之间的间距

这是:


这是一篇关于iOS7中自动布局和约束如何工作的文章(类似于iOS6):

您所描述的内容非常类似于手机(或联系人)应用程序中的联系人屏幕。只需使用相同的解决方案:表视图。一行代表咖啡馆的名称。地址的一行(包含文本视图)。每个联系人号码对应一行。每个电子邮件地址对应一行。一行包含用于说明的嵌入式web视图(如果可以使用RTF而不是HTML,则为文本视图)。每个社交媒体链接一行。一行带有嵌入式地图视图。

您可以使用story board执行此操作,同时添加新的视图控制器,并使其大小灵活

看到这个屏幕截图了吗。

界面生成器和约束:对于否决票,请留下评论,让我了解如何改进提问。您几乎肯定需要使用容器视图。。还有,这里提到的一切!祝你好运不过,您需要一个滚动视图才能使它看起来很好,所以您最好使用一个表视图并免费获取它。@DBoyer这没关系。当他需要的不仅仅是将简单文本放入行中时,他将需要约束来在每个单元格中布局内容。约束可以与
UIScrollView
一起使用,因此没有问题。感谢您的建议,我从未想过为此使用tableview。我将尝试tableview和scrollview两种方法来学习这两种方法的更多内容。在我看来,您很少需要直接进入滚动视图,如果使用得当,表视图会令人惊讶,苹果已经为您完成了所有布局计算。是的,使用表视图非常简单,如果从Xcode开始,应该首先掌握这一点。