首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Swift社区

    SwiftUI 布局协议 - Part 1

    : Subviews, cache: inout ()) -> CGSize { let idealViewSizes = subviews.map { $.sizeThatFits(. let spaces = computeSpaces(subviews: subviews) for idx in subviews.indices { subviews 实现 makeCache(subviews:) 创建缓存。 可选的实现 updateCache(subviews:)[4],这个方法会在检测到更改时调用。 computeMaxHeight(subviews: subviews), spaces: computeSpaces(subviews: subviews = computeMaxHeight(subviews: subviews) cache.spaces = computeSpaces(subviews: subviews)

    3.9K10编辑于 2022-12-12
  • 来自专栏MapleYe

    【iOS】修改根控制器后,view的叠加在窗口的问题

    /remove old rootViewController's sub views for (UIView* subView in self.rootViewController.view.subviews ) { if (subView.subviews.count == 0) { [subView removeFromSuperview]; } } } 由于项目是用swift编写的,然后兴冲冲的将以上代码翻译成swift语言,发现怎样都不能满足 subView.subviews.count == 0 。 经过打印子view的层级结构,发现UILayoutContainerView仍残余 UITransitionView,那么这个就是 subView.subviews.count == 0 不满足的原因。 因此,我们只要耐心等专场动画结束后,再去判断 subView.subviews.count == 0即可。

    1.5K10发布于 2020-03-28
  • 来自专栏Swift社区

    SwiftUI 新容器视图 API 深度解析:轻松构建自定义布局

    @ViewBuilder var content: Content var body: some View { ScrollView { Group(subviews : content) { subviews in if ! subviews.isEmpty { subviews[0] .padding(.horizontal) : content) { subviews in // 第一个子视图为大图 if ! subviews.isEmpty { subviews[0] .padding(.horizontal)

    1.2K33编辑于 2024-09-30
  • 来自专栏Swift社区

    SwiftUI 布局协议 - Part2

    : Subviews, cache: inout ()) -> CGSize { let maxSize = subviews.map { $0.sizeThatFits placeSubviews(in: bounds, proposal: proposal, subviews: subviews[12.. : Subviews) -> Caches { Caches(topCache: hStack.makeCache(subviews: topViews(subviews: subviews )), centerCache: vStack.makeCache(subviews: centerViews(subviews: subviews)), bottomCache: hStack.makeCache(subviews: bottomViews(subviews: subviews))) } // ... } 插入两个布局

    3.5K30编辑于 2023-03-01
  • 来自专栏iOS 开发杂谈

    九宫格常用的宏

    和 WIDTH 不能都是 CGFloat */ #define CELL_X_WITH_SUPERVIEW_AND_WIDTH(SUPERVIEW,WIDTH,COLUMN) SUPERVIEW.subviews.count % COLUMN * WIDTH + SUPERVIEW.subviews.count % COLUMN * MARGIN /** 设置格子的Y坐标 * SUPERVIEW 指九宫格每个小格子的父视图 / COLUMN * HEIGHT + SUPERVIEW.subviews.count / COLUMN * MARGIN /**************************有间距、有边距** % COLUMN * WIDTH + (SUPERVIEW.subviews.count % COLUMN + 1) * MARGIN /** 设置格子的Y坐标 * SUPERVIEW 指九宫格每个小格子的父视图 / COLUMN * HEIGHT + (SUPERVIEW.subviews.count / COLUMN + 1) * MARGIN 九宫格demo地址

    68630发布于 2019-02-25
  • 来自专栏Swift社区

    SwiftUI 在 WWDC 24 之后的新变化

    content: Content var body: some View { VStack { Group(subviewsOf: content) { subviews subviews.isEmpty { subviews[0] } if subviews.count > 1 { subviews[1] } } if subviews.count > 2 { VStack { subviews[2...]

    2.4K10编辑于 2024-09-16
  • 来自专栏陈满iOS

    iOS开发小点·移除所有子视图

    需求: 移除所有子视图 思路1 - OC的API [view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)] ; 思路2 - 循环 for(UIView *view in [self.view subviews]){ [view removefromsuperview] } 思路3 - 枚举 [[self.view subviews] enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

    1.7K30发布于 2018-10-26
  • 来自专栏肘子的Swift记事本

    SwiftUI 布局 —— 尺寸( 下 )

    : Subviews, cache: inout ()) -> CGSize { guard subviews.count == 2, let content = subviews.last else ) { guard subviews.count == 2, let background = subviews.first, let content = subviews.last else : Subviews, cache: inout ()) -> CGSize { guard subviews.count == 1, let content = subviews.first : Subviews, cache: inout ()) { guard subviews.count == 1, let content = subviews.first else { : Subviews, cache: inout ()) -> CGSize { guard subviews.count == 2, let content = subviews.last else

    3.3K40编辑于 2022-07-28
  • 来自专栏全栈程序员必看

    layoutSubviews解析

    2.Lays out subviews文档解析。 在iOS5.1或之前的版本中,这个方法什么也没干.这个方法的默认实现是 用参数来设定subviews的尺寸和位置的 . Subclasses can override this method as needed to perform more precise layout of their subviews. You can use your implementation to set the frame rectangles of your subviews directly. 如果你需要更加精确的布局,可以在子类里面重写这个方法.仅仅在以下情况下:自动布局达不到你想要效果时你才有必要重写这个方法.你可以直接设置subviews的尺寸.

    34520编辑于 2022-09-17
  • 来自专栏阿林前端开发攻城狮

    iOS获取网络的最新方法

    int)dataNetworkTypeFromStatusBar { UIApplication app = [UIApplicationsharedApplication]; NSArray subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView

    42500发布于 2021-09-23
  • 来自专栏好派笔记

    iOS获取网络的最新方法

    int)dataNetworkTypeFromStatusBar { UIApplication app = [UIApplicationsharedApplication]; NSArray subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView

    54700发布于 2021-10-31
  • 来自专栏全栈程序员必看

    绘制图形的视图方式为_三角函数图象的平移变换

    A view can have subviews; If a view is removed from the interface, its subviews are removed; if a view is hidden (made invisible), its subviews are hidden; if a view is moved, its subviews move with it; and other changes in a view are likewise shared with its subviews. All other views in your main window will be subviews of the root view. This affects subviews: if a superview has an alpha of 0.5, none of its subviews can have an apparent

    88920编辑于 2022-08-04
  • 来自专栏肘子的Swift记事本

    掌握 ViewThatFits

    : Subviews, cache: inout Int?) subviews.isEmpty else { return .zero } // 一个子视图,返回该子视图的需求尺寸 guard subviews.count > 1 else { cache = subviews.endIndex - 1 return subviews[subviews.endIndex - 1].sizeThatFits (in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout Int?) _: Subviews) -> Int?

    1K10编辑于 2023-11-17
  • 来自专栏iOS 备忘录

    iOS开发知识点

    searchBarTextDidBeginEditing:(UISearchBar *)searchBar { _searchBarView.searchBar.showsCancelButton = YES; NSArray *subViews deviceVersion = [UIDevice currentDevice].systemVersion.floatValue; if (deviceVersion >= 7.0) { subViews = [_searchBarView.searchBar.subviews[0] subviews]; } else { subViews = _searchBarView.searchBar.subviews ; } for (id view in subViews) { if ([view isKindOfClass:[UIButton class]]) {

    44750编辑于 2023-10-16
  • 来自专栏TechBox

    两个宏快速计算九宫格X、Y坐标

    和 WIDTH不能都是CGFloat */ #define CELL_X_WITH_EDGE_PARAMETERS(SUPERVIEW,WIDTH,COLUMN,MARGIN) SUPERVIEW.subviews.count % COLUMN * WIDTH + (SUPERVIEW.subviews.count % COLUMN + 1) * MARGIN /** 设置格子的Y坐标 * SUPERVIEW 指九宫格每个小格子的父视图 HEIGHT不能都是CGFloat */ #define CELL_Y_WITH_EDGE_PARAMETERS(SUPERVIEW,HEIGHT,COLUMN,MARGIN) SUPERVIEW.subviews.count / COLUMN * HEIGHT + (SUPERVIEW.subviews.count / COLUMN + 1) * MARGIN 前提:使用这两个宏的前提是我们必须要把格子单独的放到一个父视图上 因为每个小格子X坐标、Y坐标的计算严格依赖于小格子所在的父视图的subViews的count。

    5.9K30发布于 2018-06-05
  • 来自专栏学海无涯

    iOS开发之UIScrollView在Autolayout下的使用

    一、使用的基本原则: 原则1:UIScrollView的size依赖于subviews 首先在StoryBoard中拖入一个UIScrollView,用Pin按钮,随意设置其布局。 因为设置UIScrollView的布局约束是没有用的,UIScrollView的size(即contentSize)是根据其中的subviews所占据的size来计算的。 原则2:subviews的size不能依赖于UIScrollView 因为UIScrollView的size依赖于subviews,而如果subviews的size再依赖于UIScrollView,就类似于操作系统中的死锁了

    1.3K70发布于 2018-04-24
  • 来自专栏岑志军的专栏

    iOS获取当前网络环境

    // 获取网络环境的方法 + (NSString *)networktype{ NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews]; NSNumber *dataNetworkItemView = nil; for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView

    1.1K50发布于 2018-05-28
  • 来自专栏月亮与二进制

    iOS遍历打印所有子视图引实现结

    实现 其实实现起来很简单,用递归,我们通过 [UIView subviews] 方法就可以获取一个 view 的所有子view,对于每一个子view,我们又去递归调用这个方法看看他有没有子view,有就继续调用 就是一些更人性化的做法了,实现起来也很简单,直接看代码: // 递归获取子视图 - (void)getSub:(UIView *)view andLevel:(int)level { NSArray *subviews = [view subviews]; // 如果没有子视图就直接返回 if ([subviews count] == 0) return; for (UIView *subview in subviews) { // 根据层级决定前面空格个数,来缩进显示 NSString *blank = @"";

    85620发布于 2021-11-23
  • 来自专栏编程之旅

    自定义UISearchController的外观

    同时我们也可以直接获取UISearchBar的subViews,UISearchBar的subView是一个UIView的实例,这个UIView包含了所有在UISearchBar上可以展示的子视图,iOS 我们可以通过循环遍历出UISearchBar上所有展示出来的子视图 for(UIView*viewin[[[_searchController.searchBar subviews]lastObject ]subviews] ) { if([viewisKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {} if([viewisKindOfClass searchController.searchBar setShowsCancelButton:YES animated:NO]; 去掉搜索框背景 for(UIView*viewin[[[_searchController.searchBar subviews ]lastObject]subviews] ) { if([viewisKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { [view

    2.1K20发布于 2018-08-30
  • 来自专栏日常技术分享

    iOS 点击事件如何穿透透明的View?

    首先调用当前视图的pointInside:withEvent:方法判断触摸点是否在当前视图内; 若返回NO,则hitTest:withEvent:返回nil; 若返回YES,则向当前视图的所有子视图(subviews )发送hitTest:withEvent:消息,所有子视图的遍历顺序是从top到bottom,即从subviews数组的末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕; 若第一次有子视图返回非空对象 point withEvent:event] == NO) {return nil;} // 3.从后往前遍历自己的子控件 NSInteger subViewCoutn = self.subviews.count NSInteger i = subViewCoutn - 1; i >= 0; i--) { // 取subView UIView *childView = self.subviews

    4.5K10发布于 2020-06-16
领券