2016-08-25 16 views
3

私のコード(Swift 2.0 iOS 9)でUIScrollViewを作成し、ScrollViewにUILabelを追加して大量のテキストを表示しました。テキストはviewDidLoad()によってロードされ、バンドル内のファイルからロードされます。UILabelの複数の行にフルテキストが表示されない

私はnumberOfLines = 0label.lineBreakMode = .ByWordWrappingを使用しましたが、8行のテキストのみが表示されています。コードの下には、コード結果のイメージが表示されます。私は彼らの境界を示すためにUILabelUIScrollViewに色を付けました。

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.configureView() 
    let sv = UIScrollView(frame: self.view.bounds) 
    sv.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
    self.view.addSubview(sv) 
    sv.backgroundColor = UIColor.greenColor() 
    var y: CGFloat = 10 
    let file = detailItem as! String 
    if let sectionsFile = NSBundle.mainBundle().pathForResource(file, ofType: "txt") { 
     if let sectionText = try? String(contentsOfFile: sectionsFile, usedEncoding: nil) { 
      let label = UILabel() 
      label.numberOfLines = 0 
      label.text = sectionText 
      label.sizeToFit() 
      label.frame.origin = CGPointMake(10,y) 
      sv.addSubview(label) 
      y += label.bounds.size.height + 10 
      label.lineBreakMode = .ByWordWrapping 
      label.frame.size.width = self.view.bounds.size.width - 20 
      label.backgroundColor = UIColor.yellowColor() 
      label.autoresizingMask = .FlexibleWidth 
     } 
     var sz = sv.bounds.size 
     sz.height = y 
     sv.contentSize = sz 
    } 
} 

これは、コードの結果である:http://i.stack.imgur.com/Zh4En.png

は、私はすべてのテキストを表示するようにできるように行うには何が必要ですか?あるいは、情報テキストを提示するという同じ目的を達成するより良い方法がありますか?

+0

テキストを正当化しようとしましたか?それはあなたがする必要があります。 – Woodstock

+0

多分、他のフレーム変更コード、特に幅を更新するコードの後に​​sizeToFit呼び出しを移動する必要があります。 – Surely

+0

ラベルに制約がありますか? – TheValyreanGroup

答えて

2

同じままです。新しい幅は、sizeToFit呼び出し中に与えられる1つのラベルよりも小さい可能性があります。そのため、テキストの一部が収まらない理由があります。

はこれを試してみてください:

let desiredLabelWidth = self.view.bounds.size.width - 20 
let size = label.sizeThatFits(CGSize(desiredLabelWidth, CGFloat.max)) 
label.frame = CGRect(x: 10, y: y, width: desiredLabelWidth, height: size.height) 

これは、所定の幅とそれのサイズのラベルを要求し、それに応じてフレームを設定します。

また、自動サイズ変更マスクlabel.autoresizingMask = .FlexibleWidthのコードでは、幅がスーパービューと共に変更されるため、高さは変更されないため意味がありません。したがって、ラベルの新しいサイズはそのテキストと一致しません。

0

Microsoft Wordと同じように、テキストを「正当化」する必要があります。

と並行してNSMutableParagraphStyleを使用して、妥当と思われるテキストを表示する必要があります。

NSBaselineOffsetAttributedNameを0.0に設定することが必須です。

例コード高さながら、あなたはラベルのサイズ自体を作るためにsizeToFitを呼び出しているが、いくつかの行は、あなたが特定の値にあなたのラベルのフレームの幅を設定ダウン、あなたのコードを見てみると

let sampleText = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 

let paragraphStyle = NSMutableParagraphStyle() 
paragraphStyle.alignment = NSTextAlignment.Justified 

let attributedString = NSAttributedString(string: sampleText, 
    attributes: [ 
     NSParagraphStyleAttributeName: paragraphStyle, 
     NSBaselineOffsetAttributeName: NSNumber(float: 0) 
    ]) 

let label = UILabel() 
label.attributedText = attributedString 
label.numberOfLines = 0 
label.frame = CGRectMake(0, 0, 400, 400) 


let view = UIView() 
view.frame = CGRectMake(0, 0, 400, 400) 
view.addSubview(label) 
+0

ソリューションを正常にテストできませんでした。私が集めることによって、あなたの例は、それ自身で立つことができるはずです。正しい?私はそれを単一ビュープロジェクトのviewDidLoad()に入れても、シミュレータには何も表示されません。何か提案はありますか? –

関連する問題