ios - UIButton is unclickable after change in container height -
an uibutton contained inside uiscrollview. have setup in xib. use nslayoutconstraint change height of scrollview. after click button, scrollview changes height, uibutton becomes unclickable.
here code:
- (ibaction)tagpressed:(uibutton *)sender {      if (self.height.constant == 200) {         self.height.constant = 88;     }else        self.height.constant = 200;      [self.view setneedsupdateconstraints];      [uiview animatewithduration:0.5f animations:^{         [self.view layoutifneeded];     }];      drect(_scrollview.frame)     drect(self.view.frame)     drect(sender.frame)     nslog(sender.selected ? @"selected" : @"not selected"); }
drect nslog frames. console out is:
2013-04-08 17:04:19.264 touchselectapp[93618:c07] cgrect ( 20.000000, -112.000000, 62.000000, 200.000000) 2013-04-08 17:04:19.266 touchselectapp[93618:c07] cgrect ( 0.000000, 300.000000, 320.000000, 88.000000) 2013-04-08 17:04:19.266 touchselectapp[93618:c07] cgrect ( 7.000000, 78.500000, 48.000000, 44.000000) output (lldb) po [[uiapp keywindow] recursivedescription] had add button create debugging stop. button care inside selectabletag.
$0 = 0x0887e0e0 <uiwindow: 0x7197a90; frame = (0 0; 320 568); autoresize = w+h; layer =    <uiwindowlayer: 0x7199620>>    | <uiview: 0x719ed20; frame = (0 20; 320 548); autoresize = w+h; layer = <calayer: 0x719edd0>>    |    | <uiroundedrectbutton: 0x719b9d0; frame = (51 464; 73 44); opaque = no; autoresize = tm+bm; layer = <calayer: 0x719baf0>>    |    |    | <uigrouptableviewcellbackground: 0x719c2a0; frame = (0 0; 73 44); userinteractionenabled = no; layer = <calayer: 0x719c370>>    |    |    | <uiimageview: 0x719da50; frame = (1 1; 71 43); opaque = no; userinteractionenabled = no; layer = <calayer: 0x719dd20>>    |    |    | <uibuttonlabel: 0x719d0f0; frame = (12 12; 49 19); text = 'button'; clipstobounds = yes; opaque = no; userinteractionenabled = no; layer = <calayer: 0x719d1e0>>    |    | <uiview: 0x71a1160; frame = (0 300; 320 88); autoresize = rm+bm; layer = <calayer: 0x71a11c0>>    |    |    | <selectabletag: 0x719fcc0; baseclass = uiscrollview; frame = (20 -112; 62 200); clipstobounds = yes; autoresize = w+h; gesturerecognizers = <nsarray: 0x71a04e0>; layer = <calayer: 0x719fef0>; contentoffset: {0, 0}>    |    |    |    | <uiimageview: 0x71a0c20; frame = (55 193; 7 7); alpha = 0; opaque = no; autoresize = tm; userinteractionenabled = no; layer = <calayer: 0x71a0cc0>>    |    |    |    | <uiimageview: 0x71a0dd0; frame = (55 62; 7 7); alpha = 0; opaque = no; autoresize = lm; userinteractionenabled = no; layer = <calayer: 0x71a0e70>>    |    |    |    | <uiroundedrectbutton: 0x719ddd0; frame = (-1 7; 64 44); opaque = no; layer = <calayer: 0x719b630>>    |    |    |    |    | <uigrouptableviewcellbackground: 0x719d630; frame = (0 0; 64 44); userinteractionenabled = no; layer = <calayer: 0x719b690>>    |    |    |    |    | <uiimageview: 0x719dea0; frame = (1 1; 62 43); opaque = no; userinteractionenabled = no; layer = <calayer: 0x719d990>>    |    |    |    |    | <uibuttonlabel: 0x71a1630; frame = (12 12; 40 19); text = 'test1'; clipstobounds = yes; opaque = no; userinteractionenabled = no; layer = <calayer: 0x71a1e50>> (lldb)
from the documentation of hittest:withevent: in uiview class reference:
points lie outside receiver’s bounds never reported hits, if lie within 1 of receiver’s subviews. can occur if current view’s
clipstoboundsproperty setno, affected subview extends beyond view’s bounds.
the parent of scroll view view address 0x71a1160.  notice scroll view's frame.origin.y -112. top 112 points of scroll view outside of parent's bounds.  part of scroll view never receive touches.  test1 button entirely in part of scroll view.
Comments
Post a Comment