UIButton的一部分在高度增加后停止响应触摸

时间:2018-03-02 11:21:25

标签: uibutton constraints

我有一个视图,嵌入到一个容器中,它本身位于UIScrollView中。 此视图包含与其边缘对齐的文本以及再次与边缘对齐的按钮。 当启动控制器视图时,在viewDidLayoutSubviews内部,我得到屏幕的实际高度,然后我调用视图以这种方式调整大小:

- (void)viewDidLayoutSubviews {

    [self log:@"ViewDidLayoutSubviews"];

    //::.. change scroll height according to main view ..::
    float mainHeight = _subMainView.frame.size.height;
    float scrollHeight = mainHeight - _scrollView.frame.origin.y;
    _scrollView.frame = CGRectMake(_scrollView.frame.origin.x, _scrollView.frame.origin.y, _scrollView.frame.size.width, scrollHeight);

    //::.. find buttons in child ..::
    UIViewController *child = [self.childViewControllers lastObject];

    //::.. Get only block views ::..
    NSArray *blockViews = [myTools getAllSubviewsFromView:child.view ofClass:[UIView class] byTagFrom:1000 toTag:1010];
    [self resizeViews:blockViews intoFrame:_scrollView.frame withVerticalPadding:16.0f andTopMargin:(31.0f+16.0f) andBottomMargin:0.0f andLeftMargin:16.0f andRightMargin:16.0f];

    NSArray *buttons = [myTools getAllSubviewsFromView:child.view ofClass:[UIButton class]];
    [self resizeViews:buttons intoFrame:_scrollView.frame withVerticalPadding:16.0f andTopMargin:(31.0f+16.0f) andBottomMargin:0.0f andLeftMargin:16.0f andRightMargin:16.0f];

    for (UIButton *button in buttons) {
        [button invalidateIntrinsicContentSize];
    }
}

这是调整大小的代码:

+ (void)resizeViews:(NSArray *)views intoFrame:(CGRect)parentFrame withVerticalPadding:(float)verticalPadding andTopMargin:(float)topMargin andBottomMargin:(float)bottomMargin andLeftMargin:(float)leftMargin andRightMargin:(float)rightMargin {

    float blockHeight = ((parentFrame.size.height - topMargin - bottomMargin) / views.count);
    blockHeight -= verticalPadding;
    float origin = topMargin;
    for (UIView *aView in views) {
        [aView layoutIfNeeded];
        for (NSLayoutConstraint *constraint in aView.constraints) {
            if (constraint.firstAttribute == NSLayoutAttributeHeight) {
                constraint.constant = blockHeight;
            break;
            }
        }
        origin += blockHeight + verticalPadding;
        [aView setNeedsUpdateConstraints];
        [aView layoutIfNeeded];
    }
}

视觉效果很好,因为两个视图和内容(按钮)都正确调整大小(按钮垂直和水平居中对齐,因此很容易显示良好的对齐方式)。 但是,第一个按钮是可触摸的整个区域,其下的第二个按钮只能在它的中间位置之前触及它的上部高度... 无法理解一个尺寸好的按钮在整个部分变得无法触及的可能性如何?

有任何帮助吗? :) 非常感谢。

0 个答案:

没有答案