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
的所有leading、trailing、top 和bottom 约束设置为其@ 987654323@ 和 superview
到 scrollView
将label
的行数设置为0
(无限制)
假设您使用的是autolayout
,因为您指的是UIScrollView content size ambiguity
【讨论】:
以上是关于UIScrollView 需要根据 UILabel 大小进行扩展但保持底部标签栏的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin IOS UILabel在UIScrollView中点击手势不起作用
限制 UIScrollView 内的 UILabel 的高度