我的第一个自定义视图没有滚动

Posted

技术标签:

【中文标题】我的第一个自定义视图没有滚动【英文标题】:my first custom view is not scrolling 【发布时间】:2012-07-31 14:18:03 【问题描述】:

我有一个文本视图,我正在接受来自互联网的聊天并正在打印它,但我想要比文本视图更多的颜色来格式化聊天。

我用滚动视图替换了文本视图,并在 viewdidload 中尝试(似乎可以)将我的视图类附加到它。

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _myconsoleview = [[ConsoleView alloc] initWithFrame:[self._scview bounds]];
    [_myconsoleview setBackgroundColor: [UIColor yellowColor]];
    [self._scview addSubview:_myconsoleview];
    [self._scview setNeedsDisplay];

文本到达底部它没有滚动(我尝试用鼠标拖动文本并寻找滚动条)。

所以这个示例核心文本程序说哦,这很容易滚动。只需让我的自定义视图(ConsoleView)继承滚动视图本身。所以我试试这个并现在添加这个:

@interface ConsoleView :UIScrollView<UIScrollViewDelegate>

仍然没有滚动。没有滚动条。没有任何迹象,到目前为止我正在使用 ipad 模拟器,任何类型的滚动。在 ConsoleView 中,我最终想做一些非常精致的事情,但现在我只是打印一个字符串。但是,当我附加到更多文本时,字符串会变得更长。

我在我的 sendtext 方法中试过这个。当他们点击按钮以将他们在此文本字段中键入的文本发送到服务器时,这会发生:

   [myconsoleviewid addNewText:newText];
    [_scview scrollRectToVisible:[_scview bounds] animated: TRUE];
    [_scview setNeedsDisplay];

老实说,我不确定我是否可以声称上述方法会起作用,但我认为有些方法可能会起作用。有任何想法吗?我对 ios 编程还很陌生,大约 2 个月前就开始了,到目前为止一直在不停地工作。在 java 或 android 中,似乎没有什么比把它添加到一些滚动控件中更能像控制台一样滚动了。但事实证明 IOS 更棘手。

迈克

编辑。这是我的绘制矩形,它假设打印越来越长的字符串。它在控制台视图中:

- (void)drawRect:(CGRect)rect

    [super drawRect:rect];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
    CGContextTranslateCTM(context, 0, self.bounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);    CGMutablePathRef path = CGPathCreateMutable(); //1
    CGPathAddRect(path, NULL, self.bounds );


    CTFramesetterRef framesetter =
    CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attString); //3
    CTFrameRef frame =
    CTFramesetterCreateFrame(framesetter,
                             CFRangeMake(0, [attString length]), path, NULL);

    CTFrameDraw(frame, context); //4

    CFRelease(frame); //5
    CFRelease(path);
    CFRelease(framesetter);

【问题讨论】:

【参考方案1】:

ScrollView 的 contentSize 必须大于 ScrollView 的 frame 才能允许滚动。正确设置这个属性应该没问题。

【讨论】:

如果我将整体滚动视图内容大小设置为垂直 20000,我的黄色背景会在一页上停止,所以这似乎是错误的。如果我将作为滚动视图的视图设置为垂直 2000 度,它会滚动,我看到我的黄色背景我的视图仍然存在,但文本在第一页的最后一行之后仍然停止显示。 我看到我没有接受答案。我最终更改了核心文本代码,但滚动问题仍然存在,我发现这是诀窍,contentsize 至少要大一个,接受这个答案。【参考方案2】:

您需要为scrollView.contentSize 设置适当大小的可滚动区域。

scrollView.contentSize = CGSizeMake(640, 320); // if you are in full screen and have two view one to other in horizontal

//对于垂直滚动你需要做的

scrollView.contentSize = CGSizeMake(320, 640);

如果您将 contentSize 设置为大于可滚动的视图框架大小,则此示例仅用于水平或垂直滚动​​的一种方式。

【讨论】:

如果我只是打印一个长字符串,我怎么知道大小?字符串只有文本,其中有 \n 个字符。在这一点上,我猜我有两个滚动视图。我拖到情节提要上的那个和我附加到它的 hte 视图也是一个滚动视图。我设置哪个尺寸有关系吗? 你需要设置scrollView的contentSize,并且要滚动的contentSize必须大于UIView的frame size。因为那个scrollView在UIView中。 我只想要垂直滚动,所以我添加了 _scview.contentSize = CGSizeMake(320, 1040);。我这样做是为了我的整体滚动视图。我把我的视图附加到它只是一个 UIView。好吧,我的视图上有一个黄色背景,当我现在滚动时,背景变为白色并且没有文字。我附上视图错了吗?当我在将 consoleView 设置为 uiview 之前设置它的内容大小时,我也进行了一些滚动,但在文本的初始停止点或一个屏幕下方仍然没有打印新的文本。 您的 ViewController 有视图,然后您将滚动视图添加到该视图。你用什么来显示文本 UITextView?

以上是关于我的第一个自定义视图没有滚动的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的安卓手机在为自定义滚动视图添加标签栏视图后没有功能

滚动视图中的自定义页面视图设计

滚动自定义 ListView 时,复选框值发生变化

表格单元格内的滚动视图内的自定义视图未响应事件

自定义视图在滚动视图内滚动

当我在收藏视图中滚动时,我的自定义单元格中的 UIView 锚点不断变化