我目前正在尝试创建我以前为Android制作的应用程序的iOS版本。在Android版本中,我有一个LinearLayout,我可以在其中放入我需要的任何其他布局(其中一个是RecyclerView,用于显示用户通过对话框在该特定页面上添加的数据),它只是工作正常。我现在试图在iOS上复制它有一些困难。
到目前为止我尝试过的事情: 滚动视图>堆栈视图>堆栈视图中的动态表视图显示用户添加的数据 - 到目前为止,每次尝试执行此操作都失败了 - 好像Xcode做了他们想要的任何事情,而不是我要求它做什么。随机分配的5个数字的高度和宽度并不罕见。我可以显示内容,但它显示拒绝滚动。我已经确定我已经将scrollview顶部,底部前导和尾随设置为superview,因为我看到的许多教程都指示我这样做,并且堆栈视图也有一个约束,滚动视图的宽度相等但仍然没有
静态表格视图>其中一个静态单元格中的动态表格视图 - 这里的问题是我不希望动态表格可滚动,我希望这是其中任何内容的高度,所以如果没有内容我基本上不希望这个存在,如果有1行我希望它显示1行,如果有3行我希望这显示所有3行而没有单独的滚动操作到外表视图中的那一行。
基本上,我是在一个长的可滚动屏幕之后,使用UI元素(理想情况下,在静态表格视图中,或者只是在任何类型的视图中,我可以让它们在此时显示!)在上方和下方动态表视图,动态表视图的长度完全适合添加到其中的内容。这样的事情可以在iOS上完成吗?
编辑:请附上我试图模仿的Android端UI的图片。 RecyclerView位于第三方详细信息按钮和三个相机按钮之间。
答案 0 :(得分:0)
也许您应该使用UITableView,如在建议的评论中那样:
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return textViewCount + isCamera == true ? 1:0//
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == cameraRow {
return cameraCell //suggest addSubview UICollectionView do this
}else{
return textViewCell
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == cameraRow {
return cameraCount / 3 * cameraHeight
}else{
return textViewHeight
}
}
在Objective-C中,我用它来计算字符串的大小:
@implementation NSString (FIDExtra)
- (CGSize)sizeWithTextMaxSize:(CGSize)textMaxSize font:(UIFont *)font
{
CGSize textSize = CGSizeZero;
if (self.length > 0)
{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
NSDictionary *attributesDic = @{NSFontAttributeName: font,
NSParagraphStyleAttributeName: paragraphStyle};
CGRect textRect = [self boundingRectWithSize:textMaxSize
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes:attributesDic
context:nil];
textSize = CGSizeMake(CGRectGetWidth(textRect), ceilf(CGRectGetHeight(textRect)));
}
return textSize;
}
@end
我尝试使用swift,但我不确定有用:
extension String {
func sizeWithTextMaxSize(textMaxSize:CGSize,font:UIFont) -> CGSize {
var textSize = CGSize.zero
if self.count > 0 {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineBreakMode = .byWordWrapping
let attri = NSAttributedString.init(string: self, attributes: [NSAttributedStringKey.font:font])
let textRect = attri.boundingRect(with: textSize, options: [.usesLineFragmentOrigin,.usesFontLeading], context: nil)
textSize = CGSize.init(width: textRect.size.width, height: textRect.size.height)
}
return textSize
}
}