我有一个完全使用自动布局编程的视图.我在视图中间有一个UITextView,上面和下面有项目.一切正常,但我希望能够在添加文本时扩展UITextView.当它扩展时,它应该将其下面的所有内容都推下来.
我知道如何以"弹簧和支柱"的方式做到这一点,但是有一种自动布局方式吗?我能想到的唯一方法是每次需要增长时删除并重新添加约束.
我想以编程方式更改UITextView的高度约束,因此我将约束设置为我的控制器中的插座,如下所示:
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *descriptionHeightConstraint;
Run Code Online (Sandbox Code Playgroud)
要更改它,我执行以下操作:
self.descriptionHeightConstraint.constant = self.description.contentSize.height;
Run Code Online (Sandbox Code Playgroud)
这是有效的,如果我在viewDidAppear中这样做,但问题是我可以看到高度在显示的视图之后如何变化,这不是非常用户友好所以我尝试在viewWillAppear中进行但是在那里没有工作,高度没有改变.更改约束后调用setNeedsUpdateConstraints也不起作用.
为什么在viewDidAppear中工作而不在viewWillAppear中工作?任何解决方法?
提前致谢!
我有一个UITextView补充UIView.添加的textview不可编辑,只是显示一些数据.textview中显示的数据是动态的.那是线数不固定.它可能会有所不同 因此,如果行数增加,则还需要增加textview的大小.我不知道如何做到这一点.请给我一些想法.
更新:
这是我正在做的事情:
UIView *baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 200)];
baseView.backgroundColor = [UIColor grayColor];
[window addSubview:baseView];
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(5, 30, 100, 30)];
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
textView.text = @"asdf askjalskjalksjlakjslkasj";
[textView sizeToFit];
[baseView addSubview:textView];
Run Code Online (Sandbox Code Playgroud) 有没有办法使用以下方法获得正确的NSString大小:
- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode
Run Code Online (Sandbox Code Playgroud)
不会被2或300个字符串抛出.目前,如果我尝试在这些长字符串上使用此方法,则会错误地计算它们,并且最终会在UITextView的底部显示大量空格.
我尝试过使用UILineBreakModeWordWrap和UILineBreakModeCharacterWrap.
调整大小正在进行中
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
CGFloat result = 44.0f;
NSString* text = nil;
CGFloat width = 0;
CGFloat tableViewWidth;
CGRect bounds = [UIScreen mainScreen].bounds;
tableViewWidth = bounds.size.width;
width = tableViewWidth - 150;
text = stringWithLongWords;
if (text) {
CGSize textSize = { width, 20000.0f };
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:10.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 50.0f;
result = MAX(size.height, 44.0f+30.0f);
}
return result;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用此代码
CGRect frame = self.mytext.frame;
frame.size.height = self.mytext.contentSize.height;
self.mytext.frame = frame;
Run Code Online (Sandbox Code Playgroud)
但它在iOS 7中不起作用.有谁知道为什么或有同样的问题?
编辑:
抱歉.我制作了一个UIView,一个UITextView和一个UIScrollView,所以我可以在我的uitextview展开中加载文本.
我在viewDidLoad中使用了这段代码
CGRect frame = self.moreDetailsTextView.frame;
frame.size.height = self.moreDetailsTextView.contentSize.height;
self.moreDetailsTextView.frame = frame;
CGRect moreViewFrame = self.moreDetailsView.frame;
moreViewFrame.size.height = frame.size.height + 270;
self.moreDetailsView.frame = moreViewFrame;
int scrollViewHeight = moreViewFrame.size.height + 235;
self.scrollView.contentSize = CGSizeMake(320, scrollViewHeight);
Run Code Online (Sandbox Code Playgroud)
这在ios6中运行良好,但是现在使用xcode5和ios7,当我在模拟器中测试应用程序时,uitextview不会扩展.
我制作了一个垂直文本视图,用于蒙古语.它是一个自定义文本视图,由三层视图组成:子UITextView视图,容器视图(旋转90度并翻转)以保存UITextView和父视图.(有关更多背景信息,请参阅此处和此处.)
只要介于最小和最大大小之间,视图就会根据基础文本视图的内容大小增加其大小.但是,在过去的几天里,我一直在努力修复一个错误,即添加了一个额外的空间并且内容向左移动(这将在底层文本视图的坐标上).这可以在下图中观察到.黄色视图是自定义文本视图(inputWindow在下面的视图控制器代码中调用.)
点击输入几次以增加内容视图的大小后,会添加一个额外的空格.试图滚动视图什么也没做.(在宽度达到最大值并且内容大小大于帧大小之后滚动会起作用.)就好像内容在它被放置到正确位置之前被冻结到位时处于滚动的中间位置.如果我插入另一个字符(如空格),则内容视图会将其自身更新到正确的位置.
我需要改变什么?或者,如何手动强制底层UITextView显示其内容视图在正确的位置?
我试图删除所有无关的代码,只留下View Controller和Custom Vertical TextView的相关部分.如果还有其他我应该包括的内容,请告诉我.
查看控制器
视图控制器在内容视图大小更改时更新自定义文本视图的大小约束.
import UIKit
class TempViewController: UIViewController, KeyboardDelegate {
let minimumInputWindowSize = CGSize(width: 80, height: 150)
let inputWindowSizeIncrement: CGFloat = 50
// MARK:- Outlets
@IBOutlet weak var inputWindow: UIVerticalTextView!
@IBOutlet weak var topContainerView: UIView!
@IBOutlet weak var keyboardContainer: KeyboardController!
@IBOutlet weak var inputWindowHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var inputWindowWidthConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
// get rid …Run Code Online (Sandbox Code Playgroud) 如何将UITextView扩展或缩小到其中文本的大小,然后使UIScrollview展开或缩小以适应UITextView
调整UITextView的大小以适应其内容的高度可以像这样实现:
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
Run Code Online (Sandbox Code Playgroud)
有没有类似于适合宽度的东西,没有包装内容文本?
uitextview ×7
ios ×6
iphone ×3
objective-c ×3
autolayout ×2
height ×2
ios7 ×2
swift ×2
constraints ×1
dynamic ×1
ipad ×1
nsstring ×1
uitextfield ×1
uiview ×1
xcode ×1