Swift - 以编程方式居中 UITextView

Posted

技术标签:

【中文标题】Swift - 以编程方式居中 UITextView【英文标题】:Swift - Centering the UITextView programmatically 【发布时间】:2015-03-10 00:18:01 【问题描述】:

我以编程方式将 UITextView 添加到我的视图中,但我不知道如何在屏幕的垂直中间设置文本。

我的代码如下所示:

var textView: UITextView?
textView = UITextView(frame: view.bounds)

if let theTextView = textView

    let blurEffect = UIBlurEffect(style: .Dark)
    let blurView = UIVisualEffectView(effect: blurEffect)
    blurView.frame.size = CGSize(width: self.view.frame.width, height: self.view.frame.height)
    blurView.center = view.center
    blurView.tag = 1

    theTextView.text = NSString(contentsOfFile: NSTemporaryDirectory() + "\(fileRef).txt", encoding: NSUTF8StringEncoding, error: nil) as String
    theTextView.font = UIFont.systemFontOfSize(16)
    theTextView.tag = 2
    theTextView.textColor = UIColor.whiteColor()
    theTextView.insertSubview(blurView, atIndex: 0)
    theTextView.textAlignment = NSTextAlignment.Center
    view.addSubview(theTextView)

任何关于如何做到这一点的建议将不胜感激。

编辑:刚刚修复了你必须如何解开你的可选,加载一个字符串并附加一个路径组件,并且不需要使用 self。

var textView: UITextView?
textView = UITextView(frame: UIScreen.mainScreen().bounds)
if let textView = textView 
    let verticalCenter = NSLayoutConstraint(item: textView, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0.0)
    let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .Dark))
    blurView.frame.size = CGSize(width: UIScreen.mainScreen().bounds.width, height: UIScreen.mainScreen().bounds.height)
    blurView.center = view.center
    blurView.tag = 1
    textView.font = UIFont.systemFontOfSize(16)
    textView.tag = 2
    textView.text = String(contentsOfURL:  NSURL(fileURLWithPath: NSTemporaryDirectory().stringByAppendingPathComponent("\(fileRef).txt"))!, encoding: NSUTF8StringEncoding, error: nil)
    textView.textColor = UIColor.whiteColor()
    textView.insertSubview(blurView, atIndex: 0)
    textView.textAlignment = .Center
    view.addSubview(textView)
    view.addConstraint(verticalCenter)

【问题讨论】:

你想把文字设置在屏幕中间不管文字多长? @gabbler 是的,我已经限制了它在我的代码的其他部分中的长度。 只是确保我理解正确,你的意思是垂直中间,如屏幕/父视图从上到下的相等空间? @Emil 是的,没错。 【参考方案1】:

您可以通过添加以下约束来使用自动布局:

let verticalCenter = NSLayoutConstraint(item: textView, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterY, multiplier: 1.0, constant: 0.0)
self.view.addConstraint(verticalCenter)

这添加了一个约束,使您的 textView 在self.view 内水平居中。不过,这在 Interface Builder 和 Storyboard 中要容易得多。

如果您不想使用约束(以支持 ios 5 及更低版本),您可以像这样对 textView 使用 autoresizingMasks

textView.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleTopMargin

【讨论】:

很抱歉,这对案件没有帮助。我已将新代码添加到上述问题中。

以上是关于Swift - 以编程方式居中 UITextView的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 以编程方式居中 UITextView

以编程方式将 UIButton 居中到 Superview 类(Swift 3)

使用 Swift 以编程方式将 UIView 中的标签和图像居中对齐

在 Swift 中以编程方式添加约束不起作用

Swift 3 以编程方式创建 UILabel 并添加 NSLayoutConstraints

以编程方式将约束添加到导航栏 Swift