在 Textview 中添加轮播视图
Posted
技术标签:
【中文标题】在 Textview 中添加轮播视图【英文标题】:Add Carousel View inside Textview 【发布时间】:2016-05-04 11:14:47 【问题描述】:我正在将数据添加到 TextView
到 sqlite database
。在我通过NSTextAttachment
完成的一些 Para 或 Line 数据之后,我有大约 30 到 35 张图像要添加到其中。现在我想做的是,只要有超过 2 张图像,我希望它在 Carousel View
中,并且在它之后有剩余的数据。看看我的代码。我尝试了不同的方式,但没有成功。任何帮助都感激不尽。
NSTextAttachment *textAttachment1 = [[NSTextAttachment alloc] init];
textAttachment1.image = [UIImage imageNamed:@"img1.png"];
NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
textAttachment.image = [UIImage imageNamed:@"img2.png"];
NSTextAttachment *textAttachment2 = [[NSTextAttachment alloc] init];
textAttachment2.image = [UIImage imageNamed:@"img3.png"];
NSTextAttachment *textAttachment3 = [[NSTextAttachment alloc] init];
CGFloat oldWidth1 = textAttachment1.image.size.width;
CGFloat oldWidth = textAttachment.image.size.width;
CGFloat oldWidth2 = textAttachment2.image.size.width;
CGFloat scaleFactor1 = oldWidth1 / (self.textViewResearch.frame.size.width + 70);
CGFloat scaleFactor = oldWidth / (self.textViewResearch.frame.size.width + 70);
CGFloat scaleFactor2 = oldWidth2 / (self.textViewResearch.frame.size.width + 70);
textAttachment1.image = [UIImage imageWithCGImage:textAttachment1.image.CGImage scale:scaleFactor1 orientation:UIImageOrientationUp];
textAttachment.image = [UIImage imageWithCGImage:textAttachment.image.CGImage scale:scaleFactor orientation:UIImageOrientationUp];
textAttachment2.image = [UIImage imageWithCGImage:textAttachment2.image.CGImage scale:scaleFactor2 orientation:UIImageOrientationUp];
NSAttributedString *attrStringWithImage1 = [NSAttributedString attributedStringWithAttachment:textAttachment1];
NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment];
NSAttributedString *attrStringWithImage2 = [NSAttributedString attributedStringWithAttachment:textAttachment2];
[attributedString replaceCharactersInRange:NSMakeRange(0, 0) withAttributedString:attrStringWithImage1];
[attributedString replaceCharactersInRange:NSMakeRange(13740, 0) withAttributedString:attrStringWithImage];
[attributedString replaceCharactersInRange:NSMakeRange(13741, 0) withAttributedString:attrStringWithImage2];
self.textView.attributedText = attributedString;
【问题讨论】:
改用 uicollectionview 怎么样?将前两个图像放在第一个单元格中,这些单元格包含在 uicollectionviewcell 中。然后将其余部分保留为普通单元格。我想知道我是否理解你的想法...... 不可能@Calios。该应用程序不同,我无法添加 UIColllectionVIew 我尝试了不同的方法,但没有成功。到底想错了什么? @AminNegm-Awad 我希望文本视图中的图像水平而不是垂直滑动。所以想在我做不到的地方在 textView 中添加轮播! 轮播应该是textview的子view? 【参考方案1】:如果我的理解正确,您希望将图像放置在文本视图中并让文本围绕它流动。拥有超过 2 张图片,您希望拥有一个轮播,iCarousel
类的一个实例。
在UITextView
的实例中拥有一个子视图并让文本在其周围浮动,这是一项已知任务。最简单的方法似乎是使用这样的文本容器的排除路径:
// Get the dimension of the subview
iCarousel *subview = …;
UIBezierPath *subviewPath = [UIBezierPath bezierPathWithRect:subview.frame];
// Somewhere you should add it
UITextView *textView = …; // Wherever it comes from
[textView addSubview:subview];
// Let the text flow around it
UITextContainer *textContainer = textView.textContainer; // The text container is the region text is laid out in.
textContainer.exclusionPaths = [subviewPath]; // Do not lay out in this region.
当然,每当子视图的框架发生变化时,您都必须更改排除区域。
一种更灵活、更复杂的方法是自己进行文本布局。如果上述方法不起作用,请告诉我。我将为此添加代码。
【讨论】:
感谢您的贡献 Amin,上面的代码不起作用,我发现,无法在 texview 中添加轮播视图。我朋友建议的其他解决方案是使用带有自定义单元格的 TableView。让我们看看我正在实施解决方案。一旦我完成它,我一定会通知你。 我从未将轮播视图放入文本视图中。但是绝对可以将视图放入文本视图中,我看不出有任何理由,为什么轮播视图不应该在那里工作。 嗨,Aminthanx 非常感谢您的帮助,我还没有实现它,但我通过 tableview 找到了解决方案,我发现它很容易,您的解决方案仍然是有效的。所以赏金属于你。 :)以上是关于在 Textview 中添加轮播视图的主要内容,如果未能解决你的问题,请参考以下文章
怎样在collectionView头部添加轮播图,要求能随collectionView滚动