添加“填充”到 UITextView
正如标题所说,我正在尝试向 UITextView 添加类似填充的行为。当视图被推入我的导航控制器并发生以下代码时,会生成文本视图:
self.textView.layer.cornerRadius = 7;
//pretty stuff is pretty
NSString *description = appDelegate.productInDisplay.description;
[self.textView setText:description];
//pretty stuff has content now
CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
textView.frame = frame;
//set the UITextView to the size of it's containing text.
self.textView.editable = NO;
self.theScrollView.contentSize = CGSizeMake(320, 250 + textView.frame.size.height);
//set the parent scrollView's height to fit some other elements with fixed size (250)
//and the pre-mentioned UITextView
所以,一切正常,但我想在 UITextView 的所有 4 边添加一些填充,但我无法做到经过 3 个小时的谷歌搜索,找到了一些看起来相当简单的东西。有什么建议吗?
as the title says i am trying to add padding-like behavior to a UITextView. The textview is generated when the view is pushed inside my navigation controller and the following code occurs:
self.textView.layer.cornerRadius = 7;
//pretty stuff is pretty
NSString *description = appDelegate.productInDisplay.description;
[self.textView setText:description];
//pretty stuff has content now
CGRect frame = textView.frame;
frame.size.height = textView.contentSize.height;
textView.frame = frame;
//set the UITextView to the size of it's containing text.
self.textView.editable = NO;
self.theScrollView.contentSize = CGSizeMake(320, 250 + textView.frame.size.height);
//set the parent scrollView's height to fit some other elements with fixed size (250)
//and the pre-mentioned UITextView
so, it all works and it's ok, but i want to add some padding on all 4 sides of the UITextView and i've been unable to do this with 3 hours of googling for something that seems rather easy. Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
使用 Objective-C 我已经用
For Swift 完成了它,您可以使用:
您还可以创建一个 Swift 扩展 (由 chowdhury-md-rajib-sarwar) 此处:
}
然后使用
Using Objective-C I have done it just with
For Swift you can use:
You can also create a Swift Extension (Suggested by chowdhury-md-rajib-sarwar) here:
}
And then use
这个答案是完全错误的。正确的答案很简单:(
这些值通常与同一屏幕上的 UITextField 的外观相匹配。)
使用这个:
This answer is totally wrong. Correct answer is simply:
(Those values generally match how a UITextField on the same screen looks.)
Use this one:
这在 Swift 5 中有效:
This is working in Swift 5:
编辑 2015 年 1 月 16 日:这是 2012 年写的,不再准确。如上所述使用 -textContainerInset。
原始帖子:
使用 contentInset 实际上不起作用。您有两个合理的选择:子类 UITextField 并重写 textRectForBounds: 和 EditingRectForBounds: 方法,或者在 UIView 上透明地创建文本字段并设置 UIView 的样式。
子类化 UITextField 的示例:
将其包装在 UIView 中的示例:
EDIT 1/16/2015: This was written in 2012 and is no longer accurate. Use -textContainerInset as mentioned above.
Original post:
Using contentInset won't actually work. You have two reasonable choices: subclass UITextField and override the textRectForBounds: and editingRectForBounds: methods or create your text field transparently over a UIView and style the UIView.
Example of subclassing the UITextField:
Example of wrapping it in a UIView:
这对我使用 swift 2.0 有用:
textView.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10)
This worked for me using swift 2.0:
textView.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10)
对于斯威夫特 4.2:
For Swift 4.2:
对于 Swift 3 - 答案似乎相似,但略有不同:(
实际上,我将上面的内容用于 UIButtonView,但由于它与为 UITextView 发布的答案非常接近,我想[希望]它适用也为此)
For Swift 3 - the answer appears to be similar, but slightly different:
(Actually, I used the above for a UIButtonView, but as it is so closed to the answers that were posted for UITextView I'm thinking [hoping] that it applies for that too)
只需使用 Container Edge Inset 创建
UITextView
的扩展
,如下所示:并使用它:
Simply create an
extension
ofUITextView
using Container Edge Inset as following:and use it like:
textContainerInset - 应该设置,并且 lineFragmentPadding 应设置为 0 以删除默认填充
textContainerInset - should be set and lineFragmentPadding should be set to 0 for removing default padding