我遇到了一个严重的问题,我似乎无法修复,这让我在过去两天疯狂。我已经进行了广泛的搜索,但我找不到解决办法,即使我尝试了很多。
我UITextView
内有UIScrollView
。我能够动态调整scrollview中的UITextView
以显示文本。但是当UITextView
包含非常大的文本时,当我几乎滚动到最后时它会被切断。但是,UIScrollView
的框架仍然正确调整大小。
使用AutoLayout在xib中创建UIScrollview
和UITextview
。
这是我当前的代码和截图,因为您可以看到屏幕截图中的空白位置应填充文本。请帮忙。
- (void)viewDidAppear:(BOOL)animated
{
CGRect frame = self.longDescField.frame;
frame.size.height = self.longDescField.contentSize.height;
self.longDescField.frame = frame;
self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.longDescField.contentSize.height + 200);
self.scrollView.scrollEnabled = YES;
[self.scrollView flashScrollIndicators];
}
答案 0 :(得分:129)
此问题自iOS 7以来就已存在,并且仍然存在于iOS 12中。
但是,正如@igz推荐的那样,我无法通过在调整大小之前设置scrollEnabled = NO
来保持正常的滚动行为。相反,我在调整大小
on
和off
// Resize text view here
textView.scrollEnabled = NO;
textView.scrollEnabled = YES;
这会强制剪切文本正确呈现。
答案 1 :(得分:15)
感谢大家的帮助。这最终最终会在iOS7中为我工作。
我必须禁用此特定xib的自动布局。
然后做了以下事情:
[textView setScrollEnabled:YES];
[textView setText:text];
[textView sizeToFit];
[textView setScrollEnabled:NO];
答案 2 :(得分:10)
对我来说,解决方法是在自定义textView
后放置sizeToFit
[self.yourTextView sizeToFit];
这应该是您在操作textview时所做的最后一件事,不应该在填充内容文本之前。
答案 3 :(得分:7)
绝对是iOS7。我有同样的问题适用于所有调整大小的UITextViews,生成xib和代码。我发现在改变UITextView框架后需要调整textContainer.size。
我创建了这个类别代码来调整textContainer.size,但是在设置文本值之后似乎也需要调整,所以如果没有设置框架大小,我必须在任何文本更改后调用adjustAfterFrameChange。 这段代码假设UITextView没有对setFrame执行任何操作:本身取出setFrame:如果你想避免这种风险,请手动调用adjustAfterFrameChange
修改:已更改
self.textContainer.size = self.frame.size; // fix for cut off text
到
self.textContainer.size = self.contentSize; // fix for cut off text
@interface UITextView(Extras)
- (void)adjustAfterFrameChange;
@end
@implementation UITextView(Extras)
- (void)adjustAfterFrameChange {
#if defined(__IPHONE_7_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0
if ([self respondsToSelector:@selector(textContainer)])
self.textContainer.size = self.contentSize; // fix for cut off text
#endif
}
- (void)setFrame:(CGRect)frame {
[super setFrame:frame];
[self adjustAfterFrameChange];
}
@end
答案 4 :(得分:5)
试试这个
[self.textView setContentInset:UIEdgeInsetsMake(-8.0, 0, -8.0, 0)];
它适用于UITextView中的剪切文本显示。
答案 5 :(得分:5)
我遇到了类似的问题,其中长文本在调整文本视图大小后被切断了。 在调整大小之前关闭scrollingEnabled似乎解决了它。当然看起来像是IOS 7的错误。
答案 6 :(得分:5)
可以通过将连续布局属性设置为false来解决此问题。
textView.layoutManager.allowsNonContiguousLayout = false
虽然文档说默认值为false,但实际上UITextView设置为true。
答案 7 :(得分:2)
试试吧。
在IOS 8和Xcode 6.3中,
textview.scrollEnabled=YES;
[self.textview setContentInset:UIEdgeInsetsMake(-10.0, 0, -5.0, 0)];
答案 8 :(得分:1)
我们在推出iOS7时出现了这样的问题。当我们调用setText时,它向我们的UITextView添加了一行(或多行),textview没有使用正确的新高度进行重绘。 setNeedsDisplay,setNeedsLayout,重绘图层,重绘整个视图等都不起作用。最后,我们强迫失去并获得关注:
[textView resignFirstResponder];
[textView becomeFirstResponder];
这迫使高度重新计算并纠正重绘。值得庆幸的是,它不会导致键盘弹出,但是在您的应用支持的任何iOS版本上都值得回归测试。
答案 9 :(得分:1)
这种情况一直发生在Interface Builder中。
选择文本视图后,在“实用程序检查器”中取消选中“显示垂直指示器”选项。现在出现裁剪文本。
答案 10 :(得分:1)
这些答案都不适合我。
我在故事板上愚弄,不知怎的,它现在正在工作。它在故事板中看起来仍然不对,但在设备上它现在显示得很好。
我做了各种各样的事情,包括切换文本字段的许多选项。
我认为为我修复的是使视图更大,构建并再次使其成为正确的尺寸。
我为一个模糊的不确定答案道歉,但也许它会有所帮助。这个项目最初是为iOS 5编写的,从那以后文本视图可能不会被搞砸了。
答案 11 :(得分:1)
我对textview有相同的问题(没有scrollview)。只需取消选中“属性”检查器中的“滚动已启用”即可解决此问题(Xcode 7.3.1,iOS 9.3)。
答案 12 :(得分:0)
我可能错了,但我不完全理解你的问题,但使用UIScrollView有什么用,因为UITextView类实现了可滚动的多行文本区域的行为?
您应该丢弃UIScrollView。
答案 13 :(得分:0)
我面临同样的情况。我必须禁用UITextView的滚动,这样做会导致最后一行被删除。这是我的解决方案:
//In the UITextView subClass, override "gestureRecognizerShouldBegin" and let the scrolling of UITextView remain on.
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && gestureRecognizer.view == self){
return NO;
}
return [super gestureRecognizerShouldBegin:gestureRecognizer];
}
答案 14 :(得分:0)
在Swift中,我只需设置 private void NodeConfigurationWizardCustomizeCommandButtons(object sender, CustomizeCommandButtonsEventArgs e)
{
_nextButton = e.NextButton;}
private void GetRowsButtonClick(object sender, EventArgs e)
{
var rowList = ServiceClient.GetAvailableRows();
var rowsReturned = rowList.Count > 0;
_nextButton.Button.Enabled = rowsReturned ;}
的{{1}}即可解决此问题:
textContainerInset
答案 15 :(得分:0)
这对我有用:
textView.scrollEnabled = NO;
//resize here
textView.scrollEnabled=YES;