我已经读了一堆帖子来添加标题到UICollectionView.在 Swift的iOS 7应用程序中,我试图添加一个带有UILabel的标头,其高度应根据UILabel的高度进行调整. UILabel有线= 0.

我已经在IB中使用AutoLayout设置了标题

ViewController实现UICollectionViewDelegate,UICollectionViewDataSource.我没有为标题设置一个自定义类,但是使用这两个函数:

func collectionView(collectionView: UICollectionView,layout collectionViewLayout: UICollectionViewLayout,referenceSizeforHeaderInSection section: Int) -> CGSize {
      //description is a String variable defined in the class
    let size:CGSize = (description as Nsstring).boundingRectWithSize(CGSizeMake(CGRectGetWidth(collectionView.bounds) - 20.0,180.0),options: NsstringDrawingOptions.UsesLineFragmentOrigin,attributes: [NSFontAttributeName: UIFont(name: "Helvetica Neue",size: 16.0)],context: nil).size
    return CGSizeMake(CGRectGetWidth(collectionView.bounds),ceil(size.height))
}

func collectionView(collectionView: UICollectionView!,viewForSupplementaryElementOfKind kind: String!,atIndexPath indexPath: NSIndexPath!) -> UICollectionReusableView! {
    var reusableview:UICollectionReusableView = UICollectionReusableView()
    if (kind == UICollectionElementKindSectionHeader) {
                    //listCollectionView is an @IBOutlet UICollectionView defined at class level,using collectionView crashes
            reusableview = listCollectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader,withReuseIdentifier: "ListHeader",forIndexPath: indexPath) as UICollectionReusableView
            let label = reusableview.viewWithTag(200) as UILabel  //the UILabel within the header is tagged with 200
            label.text = description   //description is a String variable defined in the class
        }
    }
    return reusableview
}

文本的显示似乎正在工作,但高度计算似乎不起作用(见下面的屏幕截图).此外,我不认为我可以通过collectionView … referenceSizeforHeaderInSection函数访问UILabel.关于如何正确计算CGSize的任何建议?

解决方法

这是我怎么做到的
let labels = [
"Lorem ipsum dolor sit amet,consectetur adipiscing elit. Nunc ac lorem enim. Curabitur rhoncus efficitur quam,et pretium ipsum. Nam eu magna at velit sollicitudin fringilla nec nec nisi. Quisque nec enim et ipsum feugiat pretium. Vestibulum hendrerit arcu ut ipsum gravida,ut tincidunt justo pellentesque. Etiam lacus ligula,aliquet at lorem vel,ullamcorper commodo turpis. Nullam commodo sollicitudin mauris eu faucibus.","Lorem ipsum dolor","Lorem ipsum dolor sit amet,et pretium ipsum. Nam eu magna at velit sollicitudin fringilla nec nec nisi. Quisque nec enim et ipsum feugiat pretium."]

基本思想是创建一个相同的UILabel来计算它的大小,以帮助我们在ReferenceSizeforHeaderInSection方法中.

我的UICollectionReusableView子类(MyHeaderCollectionReusableView)中有一个名为“label”的标签出口,我通过在故事板中分配我的部分标题视图(将“MyHeader”设置为部分视图的重用标识符).所提到的标签对于段标题边界具有水平和垂直空间限制,以便正确地自动布局.

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        return 3
    }

override func collectionView(collectionView: UICollectionView,viewForSupplementaryElementOfKind kind: String,atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

        let headerView =
        collectionView.dequeueReusableSupplementaryViewOfKind(kind,withReuseIdentifier: "MyHeader",forIndexPath: indexPath)
            as MyHeaderCollectionReusableView

        headerView.label.text = labels[indexPath.section]

        return headerView

    }

func collectionView(collectionView: UICollectionView,referenceSizeforHeaderInSection section: Int) -> CGSize {
        // that -16 is because I have 8px for left and right spacing constraints for the label.
        let label:UILabel = UILabel(frame: CGRectMake(0,collectionView.frame.width - 16,CGFloat.max))
        label.numberOfLines = 0
        label.lineBreakMode = NSLineBreakMode.ByWordWrapping
       //here,be sure you set the font type and size that matches the one set in the storyboard label
        label.font = UIFont(name: "Helvetica",size: 17.0)
        label.text = questions[section]
        label.sizetoFit()

// Set some extra pixels for height due to the margins of the header section.  
//This value should be the sum of the vertical spacing you set in the autolayout constraints for the label. + 16 worked for me as I have 8px for top and bottom constraints.
        return CGSize(width: collectionView.frame.width,height: label.frame.height + 16)
    }

ios – 基于UILabel的动态UICollectionView标题大小的更多相关文章

  1. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

  2. ios – 将UIViewController视图属性设置为不带有storyboard / nib的自定义UIView类

    或者上面的代码片段是推荐的吗?

  3. 在iOS App中使用CoreAnimation / QuartzCore动画UILabel

    我实际上在我的iOS应用程序中设置了动画UILabel的问题.在网上搜索代码片段2天后,仍然没有结果.我找到的每个样本都是关于如何为UIImage制作动画,将它作为子视图添加到UIView中.有没有关于动画UILabel的好例子?我通过设置alpha属性为闪烁动画找到了一个很好的解决方案,如下所示:我的功能:在UILabel上调用我的函数:但是pulse或缩放动画呢?另一个注意事项–可以在here找到CALayer动画属性的完整列表.快乐的补间!

  4. uitableview – UILabel和UILabel在iOS 7中的省略号颜色变化

    提前谢谢你的帮助!

  5. ios – UILabel在垂直生长和断线时添加了不必要的顶部和底部填充

    )之间切换也不能解决问题.我能够在Xcode6和Xcode7beta,InterfaceBuilder以及运行应用程序时重现此行为.解决方法看起来修复无意填充的唯一方法是将Lines设置为常量(例如3).UILabel仍将动态增长,并且不会添加任何填充.

  6. ios – 如何根据文本计算TextView高度

    我使用下面的代码计算文本的高度,然后为UILabel和UITextView设置此高度这对于UILabel来说是完美的,但对于UITextView来说,它计算错误.我认为问题的发生是因为UITextView的填充(左,右)比UILabel大.那么如何计算正确的文本大小以便在UITextView中显示.任何帮助或建议将非常感谢.如下面的描述图片具有相同的大小(300),相同的字体,相同的文字,但UIT

  7. ios – UILabel有两种不同颜色的文字

    我怎么能有一个UILabel有两种不同颜色的字体?

  8. ios – 默认的自动布局内容拥抱和内容压缩阻抗优先级值是什么?

    我正在尝试调试自动布局问题,并且知道内容拥抱和内容压缩阻力优先级的默认值将有所帮助.这些是什么?它们是否特定于特定组件?我可以使用常量来引用它们吗?

  9. ios – 突出显示UILabel中的文本

    我正在尝试设置背景颜色/突出显示在UILabel内的文本.问题在于,还会突出显示添加到UILabel中以保持文本居中的换行符和空格.注意UILabel最后一行之前的间距突出显示.此外,任何新行的开始和结束也突出显示.我使用以下代码创建上面的示例:我想实现的输出是只突出显示文本和单词之间的空格,如果只有一个空格.文本的长度和UILabel的大小会不断变化,所以硬编码解决方案不是一个选择.解决方法在我

  10. ios – 更改UIBarButtonItem标题时,转换是抖动/闪烁

    解决方法而不是再次设置标题,您可以再次使用标题设置按钮,然后将其动画化:

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部