我在电话中提出一个UINavigationController
(有一个根视图控制器,已经被自然推动)时,我注意到了一些奇怪的行为UIViewControllerAnimatedTransitioning
.
*注意:这是在模拟器上测试的,因为它很容易启用/禁用通话状态栏,但测试人员在实际手机上观察到了这种现象.
如果状态栏是异常高度,我通过在演示期间调整控制器的框架来解决问题:
@interface CustomAnimationController : NSObject <UIViewControllerAnimatedTransitioning>
@end
@implementation CustomAnimationController
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
UIViewController *toController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
UIView *container = [transitionContext containerView];
CGRect frame = [transitionContext finalFrameForViewController:toController];
if (CGRectEqualToRect(frame, CGRectZero))
{
// In my experience, the final frame is always a zero rect, so this is always hit
UIEdgeInsets insets = UIEdgeInsetsZero;
// My "solution" was to inset the container frame by the difference …
Run Code Online (Sandbox Code Playgroud) 我有UICollectionView
一些相互重叠的细胞.
我将它们设置zIndex
在UICollectionViewLayout
子类中,UICollectionViewLayoutAttributes
因此它们以可视方式显示在所需的顺序中.触摸均匀的命中区域按预期工作,当敲击单元的重叠区域时zIndex
,通过该collectionView:didSelectItemAtIndexPath:
方法具有更高的单元格.
我转换到UICollectionViewFlowLayout
子类,当我转换回第一UICollectionViewLayout
个子类zIndex
时,在点击重叠区域时,并不总是选择具有更高的单元格.
进一步调查显示,子视图中UICollectionViewCell
s 的顺序UICollectionView
是确定敲击哪个单元格.
我已经写了一个重新排序子视图的方法,但这看起来有点像黑客.
根据细胞在视觉上的显示方式,是否有更好的方法让UICollectionView
细胞返回预期的索引路径collectionView:didSelectItemAtIndexPath:
?
首先,我的应用程序的设置:
大多数应用程序的视图控制器都存在于您的标准导航控制器层次结构中,但我还在主应用程序窗口上有第二个窗口,它主持一个视图控制器(NotificationVC
).如果NotificationVC
正在显示通知,它将更改状态栏样式以与通知形成对比,但否则它会将样式推迟到主窗口的根视图控制器.
我的问题是主窗口中的更改通常会触发状态栏外观更新(推送,弹出或呈现视图控制器或调用-[UIViewController setNeedsStatusBarAppearanceUpdate]
)无效.
以下是相关代码NotificationVC
:
@implementation NotificationVC
- (UIStatusBarStyle)preferredStatusBarStyle
{
if (self.isShowingNotification)
{
if (self.notificationView.hasDarkBackground)
{
return UIStatusBarStyleLightContent;
}
else
{
return UIStatusBarStyleDefault;
}
}
else
{
return [[UIApplication sharedApplication].delegate window].rootViewController.preferredStatusBarStyle;
}
}
@end
Run Code Online (Sandbox Code Playgroud)
如何让状态栏从主窗口中的一个视图控制器更新?
注意:手动设置状态栏外观(-[UIApplication setStatusBarStyle:]
)不适用于此应用程序.
我有UICollectionView
很多细胞.我想加载所有单元格viewDidLoad
,但UICollectionView
只有当它们可见时才加载它的单元格.
有什么建议?
我有一个UITextView
,我希望最多有两行.
当文本视图到达两行并且它的宽度结束时,我希望它停止接受任何新字符.
我测试过:
UITextView *textView = ...
textView.textContainer.maximumNumberOfLines = 2;
Run Code Online (Sandbox Code Playgroud)
这使得文本视图的UI看起来正确,但它仍然接受新字符,并使文本增长到UI中可见的范围之外.
仅限制字符数不是一个好主意,因为每个字符都有自己的宽度和高度.
我正在使用自动布局.
ios ×4
objective-c ×2
uiview ×2
autolayout ×1
blame ×1
cells ×1
git ×1
ios7 ×1
iphone ×1
uikit ×1
uistatusbar ×1
uitextview ×1
uiwindow ×1
z-index ×1