您如何将 UITextView 居中作为 UIView 的子视图?

Posted

技术标签:

【中文标题】您如何将 UITextView 居中作为 UIView 的子视图?【英文标题】:How would you center a UITextView as a subview of a UIView? 【发布时间】:2014-12-18 04:12:43 【问题描述】:

我有一个位于 UIView 内的 UITextView。我设法使用以下代码将 UITextView 居中:

self.textView.textAlignment = NSTextAlignmentCenter;

现在,文本在 UITextView 中居中,但我也想在 UIView 中居中 UITextView。

我怎样才能做到这一点?

我尝试了以下代码,但似乎什么也没做。

[self.textView setCenter:CGPointMake(self.topView.frame.size.width/2 - self.textView.frame.size.width/2, self.topView.frame.size.height/2)];

谢谢

【问题讨论】:

尝试self.textView.center = urView.center 或设置水平和垂直对齐约束。 文本视图是如何创建的?故事板?西布?代码?您使用的是约束还是自动布局? @rmaddy,文本视图是在 Storyboard 中使用常量创建的 那么很可能约束会阻止您设置中心。正确设置约束以使文本视图居中。 我在 UIView 中设置了具有水平和垂直中心约束的文本视图,但没有进行任何更改 【参考方案1】:

你需要在这里做一些数学计算。

Center = (superView.size / 2) - (subView.size / 2);

所以你必须将 superview.size(宽度和高度)除以 2,使其成为一半大小。然后将 subview.size 除以一半以调整帧中的中心点。

请参阅下面的代码将适用于您。

CGFloat centerX = (self.topView.frame.size.width / 2) - (self.textView.frame.size.width / 2);
CGFloat centerY = (self.topView.frame.size.height / 2) - (self.textView.frame.size.height / 2);

CGRect rect = self.textView.frame;
rect.origin.x = centerX;
rect.origin.y = centerY;
[self.textView setFrame:rect];

确保 AutoLyout 对应用程序禁用。我的意思是

但是如果您支持自动布局,那么这将不起作用。为此,您必须在 textView 上为位置 x 和位置 y 设置约束。

查看 Moving views with constraints 以设置自动布局约束。

【讨论】:

嗨 kampai,我确实启用了自动布局。查看您的另一个线程,当您说位置 x 和位置 y 的约束时,您的意思是我需要将文本视图的顶部和底部的约束设置为距离 topView x 像素吗? 谢谢,在启用自动布局的情况下无法以编程方式执行此操作吗? 实际上自动布局会限制视图以更改其大小和位置,我将如何搜索其他方式,明天我会继续更新。 感谢 Kampai!..关于您的另一个线程的最后一个问题,这是否也意味着由于我启用了自动布局,如果我想使用动画来实现其他海报所做的事情,不行吗? 动画会起作用。只是我们在定位或更改与 Storyboard 不同的大小时需要采取。但是如果你通过代码创建视图,那么你不需要为此使用约束。【参考方案2】:

试试

[self.textView setTextAlignment:NSTextAlignmentCenter];
[self.textView setCenter:self.topView.center];

【讨论】:

以上是关于您如何将 UITextView 居中作为 UIView 的子视图?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 以编程方式居中 UITextView

如何让UITextView文字垂直居中

如何根据 UITextView 动态调整 xib 的大小

如何让UITextView文字垂直居中

如何将 UITextView 嵌入 UITableViewCell 与作为委托的自定义单元格?

如何在 UITextView 中垂直对齐文本