편집 : 내가 여기 함께 https://github.com/brandonschlenker/BSActionSheet
더 완벽한 솔루션이 고통을 조금하고 정직하게, 나는 그것이 노력이 가치가 있는지 확실하지 않습니다를 넣었습니다. Apple이 UIActionSheet를 변경하면 이러한 모든 문제가 발생할 수 있습니다. 어쨌든, 여기에 해결책이 될 수있는 것이 있습니다 ...
UIActionSheet를 하위 클래스로 만들고 하위 뷰와 수퍼 뷰를 모두 크기 조정해야합니다.
레이아웃 하위 뷰에서 뷰를 반복하고 필요에 맞게 요소의 크기를 조정합니다. 필자는 하위 뷰 목록을 로그 아웃하여 어떤 요소를 찾았습니까? 지금까지 테이블 뷰, 테이블 뷰 프레임, 모서리를 둥글게하는 프레임, 팝업 등을 발견했습니다. 여전히 취소 버튼을 찾아 이동해야합니다.
- (void)layoutSubviews
{
CGRect tableViewFrame = CGRectZero;
for (id item in [self subviews])
{
if ([item isKindOfClass:[UIView class]])
{
UIView *v = (UIView *)item;
v.frame = CGRectMake(v.frame.origin.x, v.frame.origin.y, self.frame.size.width, 320);
for (UIView *subItem in [v subviews])
{
//table view of options
if ([subItem isKindOfClass:[UITableView class]])
{
subItem.frame = CGRectMake(subItem.frame.origin.x, subItem.frame.origin.y, subItem.frame.size.width, someNewHeightHere);
tableViewFrame = subItem.frame;
}
//table view image frame. this rounds the bottom corners
if ([subItem isKindOfClass:[UIView class]] && subItem.tag == 3334)
{
subItem.frame = CGRectMake(subItem.frame.origin.x, tableViewFrame.origin.y, subItem.frame.size.width, someNewHeightHere);
}
//this is the cancel buttons label. never could get this to do anything
if ([subItem isKindOfClass:NSClassFromString(@"UIButtonLabel")])
{
if (subItem.frame.size.width == 66)
{
}
}
}
}
}
UIViewController *v = [self viewController];
v.contentSizeForViewInPopover = CGSizeMake(self.frame.size.width, someNewHeightHere);
}
또한 부모보기 컨트롤러보기를 가져 오는 편리한 방법이 있습니다.
- (UIViewController *)viewController
{
UIResponder *responder = self;
while (![responder isKindOfClass:[UIViewController class]]) {
responder = [responder nextResponder];
if (nil == responder) {
break;
}
}
return (UIViewController *)responder;
}
"UIActionSheet에 20 개의 옵션이있는 경우" –
하를 놓친 것 같습니다. 그것은 기본적으로 시각 테마의 목록 일뿐입니다. 그것은 정적 목록이므로 테이블 뷰로 귀찮은 것처럼 보입니다. – DanM