我正在尝试实现类似于在启动新的tweet对话时twitter所做的效果。它们从顶部下拉视图,缩小其他视图,但是如果您关闭键盘,仍然可以与所有视图交互。这显然不是模态视图,但是我不能指望做类似的事情的起点。

最佳答案

它看起来像一个视图层次结构,很简单,只是巧妙地装饰了艺术品。底部是常规界面,上面是包含UITextView的视图,周围带有一些漂亮的记事本图。

实现此目的的一种方法是将两个子视图挂在视图控制器的主视图下。第一个孩子包含记事本插图和文本视图。它的位置是0,-NOTEPAD_HEIGHT。第二个孩子位于0,0,并占据整个父视图的边界。

撰写按钮告诉文本视图成为第一响应者,以及何时开始编辑...

- (void)textViewDidBeginEditing:(UITextView *)textView {
    [self setNotepadHidden:NO animated:YES];
}

我经常采用以下形式的显示/隐藏方法来重新排列此类内容...
- (void)setNotepadHidden:(BOOL)hidden animated:(BOOL)animated {

    NSTimeInterval duration = (animated)? 0.3 : 0.0;
    CGFloat offset = (hidden)? -NOTEPAD_HEIGHT : NOTEPAD_HEIGHT;

    [UIView animateWithDuration:duration animations:^{
        self.firstChild.frame = CGRectOffset(self.firstChild.frame, 0.0, offset);
        self.secondChild.frame = UIEdgeInsetsInsetRect(self.secondChild.frame, UIEdgeInsetsMake(offset, 0, 0, 0));
    }];
}

每当您想再次隐藏它时,都使用... Hidden:YES调用。确保第二个孩子的子视图具有自动调整大小的行为设置,以便在其父对象缩小时可以执行正确的操作。

我经常发现也需要这样的人
- (BOOL)isNotepadHidden {
    return self.firstChild.frame.origin.y < 0.0;
}

希望这是一个好的开始。

10-06 08:20