- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想要实现的效果是:
我的应用的当前状态是:
这是我的 View Controller 的设置。我在导航栏下面放了一个工具栏。然后,我将工具栏的委托(delegate)设置为导航栏。我已经阅读了几篇关于此的文章。提供的一种解决方案是:
navigationController?.navigationBar.shadowImage = UIImage();
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
但是这样会导致导航栏变白,失去效果。所以我从这篇文章 ( UISegmentedControl below UINavigationbar in iOS 7 ) 中得到了以下代码:
@IBOutlet weak var toolbar: UIToolbar!
var hairLine: UIView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
doneButton.enabled = false
for parent in self.navigationController!.navigationBar.subviews {
for childView in parent.subviews {
if childView is UIImageView && childView.bounds.size.width == self.navigationController!.navigationBar.frame.size.width {
hairLine = childView
print(hairLine.frame)
}
}
}
}
func removeHairLine(appearing: Bool) {
var hairLineFrame = hairLine.frame
if appearing {
hairLineFrame.origin.y += toolbar.bounds.size.height
} else {
hairLineFrame.origin.y -= toolbar.bounds.size.height
}
hairLine.frame = hairLineFrame
print(hairLine.frame)
}
override func viewWillAppear(animated: Bool) {
removeHairLine(true)
}
override func viewWillDisappear(animated: Bool) {
removeHairLine(true)
}
然而,这段代码在 View 完全加载之前删除了细线,但是当 View 加载时,它又出现了。有什么解决办法吗?
最佳答案
我在这个网站上找到了解决方案,但不记得确切的位置。
objective-C :
@interface YourViewController () {
UIImageView *navBarHairlineImageView;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
navBarHairlineImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar];
navBarHairlineImageView.hidden = YES;
}
- (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
return (UIImageView *)view;
}
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self findHairlineImageViewUnder:subview];
if (imageView) {
return imageView;
}
}
return nil;
}
swift :
class YourViewController: UIViewController {
var navBarLine: UIImageView?
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
navBarLine = findHairlineImageViewUnderView(self.navigationController?.navigationBar)
navBarLine?.hidden = true
}
func findHairlineImageViewUnderView(view: UIView?) -> UIImageView? {
if view.isKindOfClass(UIImageView.classForCoder()) && view.bounds.height <= 1 {
return view as? UIImageView
}
for subview in view.subviews {
if let imgView = findHairlineImageViewUnderView(subview) {
return imgView
}
}
return nil
}
}
关于ios - 去掉导航栏下的细线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34452920/
在 iOS7 中,UIToolbar 在顶部或底部边框上似乎没有一点线(阴影),这使得它很难与应用程序的其余部分区分开来。如何恢复屏幕顶部工具栏底部的阴影? 编辑:我应该澄清一下,我的工具栏位于屏幕顶
我正在创建一个 iOS 7 应用程序,其中我希望在 NavigationBar 下方有一个 SearchBar,我希望它们看起来像一个整体。因此,我需要用相同的颜色(已经完成)为它们着色,并删除 Na
我正在创建一个 iOS 7 应用程序,我希望在其中的 NavigationBar 下方有一个 SearchBar,并且我希望它们看起来像一个整体。因此,我需要用相同的颜色(已经完成)给它们着色,并删除
在 iOS 7 中,Apple 更改了 UIToolbar 以在其顶部显示 1 像素的细线。在某些情况下,这会在视觉上分散注意力,并且似乎没有任何公共(public) API 可以删除它。 设置sha
我有一个 UINavigationController,在其下以编程方式放置了一个 UISearchController。 searchController.searchBar.barTintColo
我添加了带有背景图片的 UINavigation 栏。 但不幸的是,UINavigation Bar 中间显示了一条不需要的 1px 细线。 我想隐藏那条线,但它不起作用。我添加了以下代码。 self
我是一名优秀的程序员,十分优秀!