UIScrollView 需要根据 UILabel 大小进行扩展但保持底部标签栏

Posted

技术标签:

【中文标题】UIScrollView 需要根据 UILabel 大小进行扩展但保持底部标签栏【英文标题】:UIScrollView needs to expand based upon UILabel sizes but maintaining bottom tab bar 【发布时间】:2015-11-30 04:48:24 【问题描述】:

所以我的 ViewController 底部有一个自制的菜单栏,我需要将其限制在屏幕底部。在导航栏和底部栏之间,我想要一个滚动视图,因此我插入了一个 UIScrollView,并在该滚动视图中放置了一个 UIView。我这样做是因为我收到了一个已通过此线程解决的错误:

UIScrollView Scrollable Content Size Ambiguity

所以我有一些标签可以根据用于标签的文本调整大小。我希望 UIScrollView 以及相关的 UIView 根据 UILabel 的长度进行调整。现在我在标签位于底部栏下方但视图没有滚动的地方有它。这是我的代码:

//
//  ItemViewController.swift
//

import UIKit
import Parse

class ItemViewController: UIViewController 


    @IBOutlet weak var menuButton: UIButton!

    @IBOutlet weak var mainImage: UIImageView!

    @IBOutlet weak var innerView: UIView!

    @IBOutlet weak var scrollView: UIScrollView!


    @IBOutlet weak var heading1: UILabel!

    @IBOutlet weak var body1: UILabel!

    @IBOutlet weak var heading2: UILabel!

    @IBOutlet weak var body2: UILabel!




    override func viewDidLoad() 
            super.viewDidLoad()


            for var y = 0; y < detailsHeadings.count; y++ 

                    switch y 
                    case 0:
                            heading1.text = detailsHeadings[y]
                            body1.text = details[heading1.text!]
                            let numLines = calcLines(body1.text!)
                            body1.numberOfLines = numLines!
                            break;
                    case 1:
                            heading2.text = detailsHeadings[y]
                            body2.text = details[heading2.text!]
                            let numLines = calcLines(body2.text!)
                            body2.numberOfLines = numLines!
                            break;
                    default:

                            break;
                    

            

            //none of the below worked
            scrollView.sizeToFit()
            scrollView.sizeThatFits(CGSize(width: 310, height: 700))
            innerView.sizeThatFits(CGSize(width: 310, height: 700))

            innerView.frame = CGRect(x: 0, y: 0, width: 320, height: 700)


    

    override func didReceiveMemoryWarning() 
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
    



    func calcLines(textString: String) -> Int?  

            let text = textString
            // cast text to NSString so we can use sizeWithAttributes
            var myText = text as NSString

            //Set attributes
            var attributes = [NSFontAttributeName : UIFont.systemFontOfSize(12)]

            //Calculate the size of your UILabel by using the systemfont and the paragraph we created before. Edit the font and replace it with yours if you use another
            var labelSize = myText.boundingRectWithSize(CGSizeMake(body1.bounds.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: attributes, context: nil)

            //Now we return the amount of lines using the ceil method
            var lines = ceil(CGFloat(labelSize.height) / body1.font.lineHeight)
            println(lines)

            let linesInt: Int = Int(lines)

            return linesInt

    


有谁知道如何实现这一目标?任何帮助将不胜感激。

【问题讨论】:

实现这一目标的最简单方法不是手动编写所有内容:使用情节提要、使用自动布局、从上到下定义所有必要的约束,并让操作系统计算您的外壳的大小。跨度> 【参考方案1】:

试试这些步骤:

label 的所有leadingtrailingtopbottom 约束设置为其@ 987654323@ 和 superviewscrollViewlabel 的行数设置为0(无限制)

假设您使用的是autolayout,因为您指的是UIScrollView content size ambiguity

【讨论】:

以上是关于UIScrollView 需要根据 UILabel 大小进行扩展但保持底部标签栏的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin IOS UILabel在UIScrollView中点击手势不起作用

限制 UIScrollView 内的 UILabel 的高度

UILabel 动态内容自动调整大小问题

UIScrollview 内的 UIView 内的 UILabel 上的 UIGestureRecognizer

我怎样才能得到 UILabel 的高度?

如何将 UILabel 添加到 UIScrollView?